簡體   English   中英

如何在 venv 中運行 Python 腳本?

[英]How to run Python script in venv?

我正在嘗試使用 venv 在 Linux 中啟動電報機器人。 但只有當 venv 手動激活時,機器人才會啟動。

Python代碼:

#!env/bin/python3
# -*- coding: utf-8 -*-
import config
import telebot

bot = telebot.TeleBot(config.token)

@bot.message_handler(content_types=["text"])
def repeat_all_messages(message): 
    bot.send_message(message.chat.id, message.text)

if __name__ == '__main__':
    bot.infinity_polling()

Bot 以命令開頭:

root@ubuntu-s-1vcpu-1gb-ams3-01:~/jira_bot# source env/bin/activate
(env) root@ubuntu-s-1vcpu-1gb-ams3-01:~/jira_bot# python3 sreda_bot.py

但是,如果我嘗試在不激活 venv 的情況下啟動它:

root@ubuntu-s-1vcpu-1gb-ams3-01:~/jira_bot# python3 sreda_bot.py
Traceback (most recent call last):
  File "sreda_bot.py", line 4, in <module>
    import telebot
ModuleNotFoundError: No module named 'telebot'

最后,我在 shebang 行的 venv 中插入了解釋器的完整路徑:

#!/root/jira_bot/env/bin/python3

使用./sreda_bot.py而不是python3 sreda_bot.py 它工作正常。

考慮到Python Shebang語法如下

#!interpreter [optional-arg]

您只需要找到您的Virtual ENV的解釋器位置。

#!<venv path>/bin/python[3.x]

因此,假設您的虛擬 ENV位於~/jira_bot基地,如下所示。

root@ubuntu-s-1vcpu-1gb-ams3-01:~/jira_bot# source env/bin/activate
(env) root@ubuntu-s-1vcpu-1gb-ams3-01:~/jira_bot# python3 sreda_bot.py

所以你的shebang應該是#!/root/jira_bot/bin/python3

Python 中的虛擬環境的目的是在項目及其模塊之間創建物理分離。 在這種情況下,您在虛擬環境中安裝的遙控機器人模塊不在虛擬環境之外的 scope(可供使用)中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM