![](/img/trans.png)
[英]How to Install python packages on a virtualenv using Ansible?
[英]How to import packages in virtualenv in python shell
我正在嘗試使用戶(尤其是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)
但是在“從push_notifications.models導入APNSDevice,GCMDevice”這一行,我遇到了一個錯誤:
'ImportError:沒有名為'push_notifications'的模塊
我認為這是因為未導入virtualenv,因為push_notifications軟件包位於mycase'myvenv'目錄中的virtualenv軟件包中。
但是,即使我通過“ ImportError”導入“ myvenv”:也沒有名為“ push_notifications”的模塊。
它會產生相同的錯誤,您對此有解決方案嗎?
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行,來自push_notifications.models import APNSDevice,GCMDevice ImportError:沒有名為“ push_notifications”的模塊
我將更改shebang以從您的虛擬環境中使用Python。
#!/home/lkm/Folder/project/app/myvenv/bin/python
然后,您不必將虛擬環境附加到python路徑,您可以刪除以下行。
sys.path.append("/home/lkm/Folder/project/app/myvenv/")
但是,如果您確實要手動將虛擬env目錄添加到Python路徑,那么我認為您想改為包含site-packages目錄:
sys.path.append("/home/lkm/Folder/project/app/myvenv/python3.4/site-packages")
您如何執行文件? 我看到你有:
#!/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'],
}
然后,在激活環境后運行python setup.py develop
,並且可以簡單地將腳本作為命令運行:
$ my-script
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.