当前位置: 首页 > 知识库问答 >
问题:

如何在Python shell中导入虚拟环境中的包

干鑫鹏
2023-03-14

我想做一个功能,定期通知用户,尤其是ios移动设备。

具体来说,我使用Pythonywhere的“预定任务”。(https://help.pythonanywhere.com/pages/ScheduledTasks)

这是我发送通知的脚本。

#!/usr/local/bin/python3.4
import sys,os,django
sys.path.append("/home/lkm/Folder/project/")
sys.path.append("/home/lkm/Folder/project/app/myvenv/")
print(sys.path)
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
from push_notifications.models import APNSDevice, GCMDevice
device = APNSDevice.objects.all()
if device is None:
    print('No Device')
message = 'Home Fried Potatoes, Yo-nola Bar, Soup du Jour, More...'
device.send_message(message)

但在从push_notifications.models导入APNSDevice, GCMDevice行,我得到一个错误:

'ImportError:没有名为'push_notifications'的模块

我认为这是因为没有导入虚拟环境,因为push_notifications包在虚拟环境包的内部,在mycase'myvenv'目录中。

但是,即使我通过“ImportError:没有名为“push_notifications”的模块”导入“myvenv”。

它也会犯同样的错误,你有解决办法吗?

UPDATE(第一个脚本,第二个错误消息)

#!/home/lkm/folder/project/app/myvenv/bin/python
import sys,os,django
sys.path.append("/home/lkm/folder/project/application/myvenv/bin/../lib/python/site-packages")
print(sys.path)
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
from push_notifications.models import APNSDevice, GCMDevice
device = APNSDevice.objects.all()
if device is None:
    print('No Device')
message = 'Home Fried Potatoes, Yo-nola Bar, Soup du Jour, More...'
device.send_message(message)

['/home/lkm/folder/project/application', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/ python3.4/lib-dynload'、'/usr/local/lib/python3.4/dist-packages'、'/usr/lib/python3/dist-packages'、'/home/lkm/folder/project/application /myvenv/bin/../lib/python/site-packages']

回溯(最近一次调用):文件“/home/lkm/folder/project/application/schedule.py”,第9行,来自推送通知。模型导入设备,GCMDevice导入错误:没有名为“推送通知”的模块

共有2个答案

何琨
2023-03-14

您是如何执行该文件的?我知道你有:

#!/usr/local/bin/python3.4

这意味着,如果执行文件时使用:

./file.py

它将与系统解释器一起执行。

您需要激活环境:

$ source env/bin/activate

并执行文件:

$ python file.py

FWIW,我认为最干净的解决方案是为您的项目提供一个setup.py脚本(packages=参数是最重要的),并定义一个入口点,类似于:

entry_points = {
    'console_scripts': ['my-script=my_package.my_module:main'],
}

然后你运行pythonsetup.py在激活环境后开发,你会简单地运行脚本作为一个命令:

$ my-script
牧梓
2023-03-14

我会将shebang更改为使用虚拟环境中的Python。

#!/home/lkm/Folder/project/app/myvenv/bin/python

然后,您不必将虚拟环境附加到python路径,您可以删除以下行。

sys.path.append("/home/lkm/Folder/project/app/myvenv/")

但是,如果您确实希望手动将virtual env目录添加到Python路径中,那么我认为您应该包含site packages目录:

sys.path.append("/home/lkm/Folder/project/app/myvenv/python3.4/site-packages")
 类似资料:
  • 我一直在使用Spyder安装的Anaconda发行版,默认使用Python 2.7。目前我需要用Python 3.4设置一个开发虚拟环境。 在线调查后的两大建议是: 首先设置虚拟环境,并指向更改Spyder的首选项,例如这里; 在虚拟环境中安装所有Spyder依赖项,如PyQt4,例如这里; 这两项建议都很繁琐,看起来不像是明智的发展选择。 是否有一个解决方案,将允许运行Spyder所需的Pyth

  • 问题内容: 从代码移动到新机器(可能运行不同的OS)相对简单并且给出相同结果的意义上来说,主要的工作之一就是确保代码的可移植性。 来自Python背景,我习惯了虚拟环境的概念。与所需软件包的简单列表一起使用时,这可以确保安装的软件包和库在任何计算机上都可用,而不会引起太多麻烦。当然,这不能保证- 不同的操作系统都有自己的缺点和特点-但这可以为您提供95%的解决方案。 R中是否存在这样的东西?即使它

  • 我需要一个包含所有全局包的虚拟环境。我创建了一个,全局Django版本是1.3.1。现在,我只需要在虚拟环境中将Django版本升级到1.4。我通过激活环境切换到我的环境,并尝试 sudo-pip-install-Django=1.4 它不是安装在虚拟环境中,而是安装在全局磁盘包中。 如何仅在虚拟环境中安装软件包?

  • 问题内容: 我有一个在Python 2虚拟环境中运行的Flask应用程序。 我希望运行Python 3程序,因此需要将python3安装到虚拟环境中。我该怎么做呢?我必须重新创建环境吗?这是困难的迁移吗? 问题答案: 不建议混合使用多个版本的Python。实际上,我什至认为这是不可能的。 创建一个新的virtualenv一点都不困难: 获取当前virtualenv中的模块列表 pip freeze

  • 问题内容: 在我的项目文件夹中,创建了venv文件夹。 当我在VS Code中运行命令时,我的venv文件夹未显示。我像这里建议的那样上了一层,但是VS Code没有看到我的虚拟解释器。 我错过了什么? 问题答案: PS: 我已经使用vs代码已有一段时间了,发现了另一种在vs代码中显示虚拟环境的方法。 通过命令提示符转到上级文件夹。 键入并回车。[为我在Windows和Linux上工作。] 这也应

  • 不能将“virtualenv”识别为内部或外部命令、可操作程序或批处理文件。 我正在遵循的步骤 在默认目录下安装-pip安装virtualenv 要创建一个venv,请运行此virtualenv-p python3 venv 激活virtualenv\Scripts\Activate 它看起来像这样(venv)