如何在venv中运行Python脚本?

2024-09-30 04:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Linux中使用venv启动电报机器人。但只有手动激活venv时,bot才会启动

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从comands开始:

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'

Tags: pyimportenvconfigmessagebinvenvubuntu
3条回答

考虑到Python的语法如下所示

#!interpreter [optional-arg]

您只需要找到您的虚拟环境的解释器位置

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

因此,假设您的虚拟环境位于~/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

最后,我在venv in shebang行中插入了解释器的完整路径:

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

使用./sreda_bot.py代替python3 sreda_bot.py。而且效果很好

Python中虚拟环境的目的是在项目及其模块之间创建物理分离。在这种情况下,您在虚拟环境中安装的telebot模块不在虚拟环境之外的范围内(可供使用)

相关问题 更多 >

    热门问题