【问题标题】:Using PYTHONPATH to use a virtualenv使用 PYTHONPATH 来使用 virtualenv
【发布时间】:2014-08-06 10:28:57
【问题描述】:

我在这样的结构中有一个 virtualenv:

venv/ 源/ 项目文件

我想在 project_files 中运行一个 makefile(调用 Python),但我想从虚拟环境中运行它。由于我的部署编排工作方式,我不能简单地执行源 venv/bin/activate。

相反,我尝试export PYTHONPATH={project_path}/venv/bin/python2.7。但是,当我尝试运行 makefile 时,python 脚本找不到安装在 virtualenv 中的依赖项。我错过了什么明显的东西吗?

【问题讨论】:

  • 激活 virtualenv,看看它给你的 PYTHONPATH。

标签: python


【解决方案1】:

PYTHONPATH environmenbt 变量不用于选择 Python 可执行文件的路径 - 与所有其他情况一样,选择哪个可执行文件取决于 shell 的 PATH 环境变量。 PYTHONPATH 用于扩充目录搜索列表(Python 中为sys.path),Python 将在其中查找满足导入的模块。

由于解释器在操作PYTHONPATH 之前将某些目录放在sys.path 上,以确保具有标准名称的替换模块不会影响标准库名称。因此,任何标准库模块都将从与安装它的解释器关联的库中导入(除非您执行一些手动操作,我不建议这样做)。

venv/bin/activate 做了很多需要在调用 shell 的命名空间中处理的事情,如果你找不到获取脚本的方法,这会使剪裁代码变得相当困难..

【讨论】:

    【解决方案2】:

    您实际上可以在虚拟环境中调用 Python 解释器。因此,在您的 Makefile 中,不要调用 python,而是调用 venv/bin/python

    【讨论】:

      【解决方案3】:

      要在 virtualenv 中运行命令,您可以使用 vex utility:

      $ vex venv make
      

      您还可以检查make PYTHON=venv/bin/python 是否适合您的情况。

      PYTHONPATH 调整sys.path 列表。它不会更改 python 二进制文件。不要在这里使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 2015-09-25
        • 1970-01-01
        相关资源
        最近更新 更多