簡體   English   中英

在Windows上的fabfile中使用activate_this.py激活python虛擬環境

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

本地開發環境:

  • Python 2.5.4
  • Virtualenv 1.4.6
  • 面料0.9.0
  • 點0.6.1
  • Django 1.1.1
  • Windows XP(SP3)

經過一番挖掘后,我發現這是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.

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