【问题标题】:How do you set your pythonpath in an already-created virtualenv?你如何在已经创建的 virtualenv 中设置你的 pythonpath?
【发布时间】:2011-06-13 00:46:56
【问题描述】:

我要编辑什么文件,如何编辑?我创建了一个虚拟环境。

【问题讨论】:

  • 检查它是否指向正确的目录。如果您还没有,请单击“新建”按钮并创建它。
  • 使用add2virtualenv 命令。
  • add2virtualenv 是一个virtualenvwrapper 命令。它不是virtualenv 的一部分。

标签: python linux unix virtualenv


【解决方案1】:

这个问题最优雅的解决方案是here

原始答案仍然存在,但这是一个混乱的解决方案:


如果您想更改 virtualenv 中使用的 PYTHONPATH,可以将以下行添加到您的 virtualenv 的 bin/activate 文件中:

export PYTHONPATH="/the/path/you/want"

这样,每次使用这个 virtualenv 时都会设置新的PYTHONPATH

编辑: (回答@RamRachum 的评论)

要将其恢复到deactivate 上的原始值,您可以添加

export OLD_PYTHONPATH="$PYTHONPATH"

在前面提到的行之前,将以下行添加到您的 bin/postdeactivate 脚本中。

export PYTHONPATH="$OLD_PYTHONPATH"

【讨论】:

  • deactivate上也会被删除吗?
  • 所以这意味着一个新创建的虚拟环境有默认的PYTHONPATH(全局的)而不是virtualenv本地路径?
  • 这对我来说效果很好,我没有使用 virtualenvwrapper。唯一需要注意的是我没有这样的 bin/postdeactivate 脚本,而是 activate 有一个 deactivate 功能。因此,这行代码应该放在那里,小心地将其包装在 if 语句中,作为函数中的其余操作。
  • virtualenv 默认不这样做似乎很奇怪。
  • 编辑#2是个谎言! :) 正确答案是@arjen-p-de-vries's one
【解决方案2】:

@s29 的评论应该是答案:

将目录添加到虚拟环境的一种方法是安装 virtualenvwrapper(这对很多事情都很有用),然后执行

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

如果您想删除这些路径,请编辑文件myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

virtualenvwrapper 的文档可以在http://virtualenvwrapper.readthedocs.org/en/latest/找到

有关此功能的具体文档可在以下位置找到 http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

【讨论】:

  • 删除:add2virtualenv -d
  • 刚刚将这个答案链接到我的,因为它要好得多
【解决方案3】:

您可以创建一个包含要搜索的目录的.pth 文件,并将其放在{venv-root}/lib/{python-version}/site-packages 目录中。例如:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

效果与将/some/library/path 添加到sys.path 相同,并保持在virtualenv 设置的本地。

【讨论】:

  • 我真的很喜欢这种方法;不像添加行来激活/停用那样变化无常,并且不需要使用 virtualenvwrapper。如果您不想调用 python 来查找站点包目录,它位于相当可预测的路径$VIRTUALENV_ROOT/lib/pythonX.Y/site-packages。 .pth 文件的文档:docs.python.org/3.6/library/site.html
  • 我不想输入绝对路径,因为我的工作区在我的文件系统中移动。而且,我的项目路径有空格。所以,我输入了稍加修改的命令:pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popd 然后我停用了我的 virtualenv,然后重新激活。我现在可以运行需要知道我的项目目录在哪里的项目代码。
  • 这是正确答案。修改供应商提供的脚本 (/bin/activate) 是一种弊端,安装 3rd 方工具不如使用内置方式来实现。
  • 对试图让它工作的人的注意事项:你必须添加一个 existing 文件系统路径(它不必是 python 模块)或者路径不会' t 出现在sys.path。引用文档:“对于每个不同的头尾组合,它会查看它是否引用了现有目录,如果是,则将其添加到 sys.path 并检查新添加的配置文件路径。”
  • 但是 .pth 和 EXPORT 方法之间存在重要区别。 EXPORT 将路径添加到 sys.path 的开头,但 .pth 添加到末尾。
【解决方案4】:
  1. 初始化您的虚拟环境
cd venv

source bin/activate
  1. 只需输入以下命令即可设置或更改您的 python 路径:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. 检查python路径在python中输入:
   python

      \>\> import sys

      \>\> sys.path

【讨论】:

    【解决方案5】:

    我修改了我的激活脚本以获取文件.virtualenvrc(如果它存在于当前目录中),并在激活/停用时保存/恢复PYTHONPATH

    You can find the patched activate script here.。它是由 virtualenv 1.11.6 创建的激活脚本的直接替代品。

    然后我在我的.virtualenvrc 中添加了这样的内容:

    export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
    

    【讨论】:

      【解决方案6】:

      这里已经回答了 -> Is my virtual environment (python) causing my PYTHONPATH to break?

      UNIX/LINUX

      将“export PYTHONPATH=/usr/local/lib/python2.0”添加到 ~/.bashrc 文件并通过键入“source ~/.bashrc”或“.~/.bashrc”来获取它。

      Windows XP

      1) 进入控制面板 2) 双击系统 3) 转到高级选项卡 4) 点击环境变量

      在“系统变量”窗口中,检查您是否有一个名为 PYTHONPATH 的变量。如果您已经有一个,请检查它是否指向正确的目录。如果您还没有,请单击“新建”按钮并创建它。

      Python 代码

      或者,你也可以在你的代码下面做:-

      import sys
      sys.path.append("/home/me/mypy") 
      

      【讨论】:

      • -1:这个地址是用户的 PYTHONPATH,而不是 virtualenv 的 PYTHONPATH。
      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多