![](/img/trans.png)
[英]What does Python Virtual Env "activate_this.py" actually do?
[英]Activate a python virtual environment using activate_this.py in a fabfile on Windows
我有一個Fabric任務需要訪問我的Django項目的設置。
在Windows上,我無法將Fabric安裝到項目的virtualenv中(Paramiko + pycrypto deps的問題)。 但是,我能夠在我的系統范圍的站點包中安裝Fabric,沒問題。
我已經將Django安裝到項目的virtualenv中,當我使用“VIRTUALENV \\ Scripts \\ activate.bat”腳本激活virtualenv時,我可以輕松地使用所有“> python manage.py”命令。
我的項目中有一個結構任務文件(fabfile.py),它提供設置,測試,部署等任務。我的fabfile中的一些任務需要通過“來自django.conf導入設置來訪問我的django項目的設置”。
由於我唯一可用的Fabric安裝在我的系統范圍的站點包中,我需要激活fabfile中的virtualenv,以便django可用。 為此,我使用項目virtualenv的“activate_this”模塊來訪問項目設置等。 在執行activate_this.py之前和之后使用“print sys.path”,我可以告訴python路徑更改指向項目的virtualenv。 但是,我仍然無法導入django.conf.settings。
我已經能夠在* nix(Ubuntu和CentOS)和Cygwin上成功完成這項工作。 您是否在Windows上使用此設置/工作流程? 如果是這樣你能幫我弄清楚為什么它不適用於Windows或提供任何提示和技巧來解決這個問題?
謝謝和干杯。
REF:
本地開發環境:
經過一番挖掘后,我發現這是activate_this.py腳本的一個問題。 在當前狀態virtualenv <= 1.4.6中,此腳本假定site-packages目錄的路徑對於所有平台都是相同的。 但是, site-packages目錄的路徑在* nix之類的平台和Windows之間有所不同。
在這種情況下,activate_this.py腳本會添加* nix樣式路徑:
VIRTUALENV_BASE / lib中/的python2.5 / site-packages中/
到python路徑而不是Windows特定路徑:
VIRTUALENV_BASE \\ LIB \\站點包\\
我在virtualenv問題跟蹤器中創建了一個問題,該問題概述了問題和解決方案。 如果您有興趣,可以在這里查看問題: http : //bitbucket.org/ianb/virtualenv/issue/31/windows-activate_this-assumes-nix-path-to-site
希望這個修復程序將在virtualenv的upcomming版本中提供。
如果您現在需要修復此問題,並且尚未修補virtualenv軟件包,您可以“修復”您自己的activate_this.py,如下所示。
編輯您的VIRTUALENV \\ Scripts \\ activate_this.py文件。 換行(17?):
site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')
至
if sys.platform == 'win32':
site_packages = os.path.join(base, 'Lib', 'site-packages')
else:
site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')
有了這個,你的activate_this.py腳本將首先檢查它正在運行的平台,然后定制site-packages目錄的路徑以適應。
請享用!
您必須從fab文件中執行activate this。 Altho'我沒有測試過,我相信以下應該可以工作:
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.