繁体   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