[英]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.