如何在pythonsh中导入virtualenv中的包

2024-10-01 13:35:46 发布

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

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

具体来说,我使用pythonanywhere的“调度任务”。(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)

但在“推”的那条线上_通知.models导入APNSDevice,GCMDevice' 我得到一个错误:

'ImportError: No module named 'push_notifications'

我认为这是因为没有导入virtualenv,因为push-untifications包位于virtualenv的包中,在mycase'myvenv'目录中。

但即使我通过ImportError导入“myvenv”:没有名为“推送通知”的模块。在

同样的错误,你有解决方法吗?在

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

^{pr2}$

['/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']

Traceback (most recent call last): File "/home/lkm/folder/project/application/schedule.py", line 9, in from push_notifications.models import APNSDevice, GCMDevice ImportError: No module named 'push_notifications'


Tags: pathimportprojecthomemodelsdevicelibusr
2条回答

我将更改shebang以使用虚拟环境中的Python。在

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

然后,您不必将virtual env附加到python路径,您可以删除以下行。在

^{pr2}$

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

sys.path.append("/home/lkm/Folder/project/app/myvenv/python3.4/site-packages")

你是如何执行文件的? 我看你有:

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

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

^{pr2}$

它将由系统解释器执行。在

您需要激活环境:

$ source env/bin/activate

并使用以下命令执行文件:

$ python file.py

FWIW,我认为最干净的解决方案是为您的项目使用一个setup.py script(最重要的是packages=参数)并定义一个entry point,类似于:

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

然后在激活环境后运行python setup.py develop 您可以简单地将脚本作为命令运行:

$ my-script

相关问题 更多 >