簡體   English   中英

如何在python shell中的virtualenv中導入軟件包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM