【问题标题】:Activate a python virtual environment using activate_this.py in a fabfile on Windows在 Windows 上的 fabfile 中使用 activate_this.py 激活 python 虚拟环境
【发布时间】:2023-04-04 17:10:02
【问题描述】:

我有一个 Fabric 任务需要访问我的 Django 项目的设置。

在 Windows 上,我无法将 Fabric 安装到项目的 virtualenv 中(Paramiko + pycrypto deps 的问题)。但是,我可以在我的系统范围的站点包中安装 Fabric,没问题。

我已将 Django 安装到项目的 virtualenv 中,当我使用“VIRTUALENV\Scripts\activate.bat”脚本激活 virtualenv 时,我可以轻松使用所有 "> python manage.py" 命令。

我的项目中有一个结构任务文件(fabfile.py),它提供设置、测试、部署等任务。我的 fabfile 中的一些任务需要通过“from django.xml”访问我的 django 项目的设置。 conf 导入设置”。

由于我唯一可用的 Fabric 安装在我的系统范围的站点包中,我需要在我的 fabfile 中激活 virtualenv 以便 django 可用。为此,我使用项目的 virtualenv 的“activate_this”模块来访问项目设置等。在执行 activate_this.py 之前和之后使用“print sys.path”,我可以告诉 python 路径更改指向项目的 virtualenv。但是,我仍然无法导入 django.conf.settings。

我已经能够在 *nix(Ubuntu 和 CentOS)和 Cygwin 上成功地做到这一点。您是否在 Windows 上使用此设置/工作流程?如果是这样,你能帮我弄清楚为什么这在 Windows 上不起作用或提供任何提示和技巧来解决这个问题吗?

感谢和干杯。


参考:

本地开发环境:

  • Python 2.5.4
  • 虚拟环境 1.4.6
  • 面料 0.9.0
  • 点 0.6.1
  • Django 1.1.1
  • Windows XP (SP3)

【问题讨论】:

    标签: python django windows-xp virtualenv fabric


    【解决方案1】:

    经过一番挖掘,我发现这是 activate_this.py 脚本的问题。在当前状态下,virtualenvsite-packages 目录的路径在 *nix 类平台和 Windows 之间有所不同。

    在这种情况下,activate_this.py 脚本添加 *nix 样式路径:

    VIRTUALENV_BASE/lib/python2.5/site-packages/

    到 python 路径而不是 Windows 特定路径:

    VIRTUALENV_BASE\Lib\site-packages\

    我在 virtualenv 问题跟踪器中创建了一个问题,其中概述了问题和解决方案。如果您有兴趣,可以在这里查看问题:http://bitbucket.org/ianb/virtualenv/issue/31/windows-activate_this-assumes-nix-path-to-site

    希望该修复将在即将发布的 virtualenv 版本中提供。


    如果您现在需要修复此问题,并且 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 目录的路径以适应。

    享受吧!

    【讨论】:

      【解决方案2】:

      您必须在 fab 文件中执行激活此操作。虽然'我还没有测试过,我相信以下应该可以工作:

      activate_this = '/path/to/env/bin/activate_this.py'
      execfile(activate_this, dict(__file__=activate_this))
      

      【讨论】:

      • 是的,这正是我在我的 fabfile 中所做的——到目前为止,它在 Windows 上对我不起作用。如果您能在 Windows 中进行快速测试并告诉我这对您有何帮助,我将不胜感激。
      猜你喜欢
      • 2023-02-16
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2019-11-02
      • 1970-01-01
      相关资源
      最近更新 更多