你如何在已经创建的virtualenv中设置你的pythonpath?

TIM*_*MEX 92 python unix linux virtualenv

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

mde*_*ous 113

编辑#2

正确的答案是@ arogachev的一个.


如果要更改PYTHONPATHvirtualenv中的used,可以将以下行添加到virtualenv的bin/activate文件中:

export PYTHONPATH="/the/path/you/want"
Run Code Online (Sandbox Code Playgroud)

这样,PYTHONPATH每次使用此virtualenv时都会设置new .

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

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

export OLD_PYTHONPATH="$PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)

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

export PYTHONPATH="$OLD_PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说效果很好,我没有使用virtualenvwrapper.唯一需要注意的是,我没有这样的bin/postdeactivate脚本,rathere activate有一个deactivate函数.因此应该将代码行放在那里,小心地将它包装在if语句中作为函数中的其余操作. (6认同)
  • 它也会在“停用”时被删除吗? (2认同)
  • 似乎很奇怪virtualenv默认不这样做. (2认同)
  • 编辑#2 是谎言!:) 正确答案是 [@arjen-p-de-vries 的一个](/sf/answers/3302935191/) (2认同)

tjb*_*tjb 71

@ s29的评论应该是一个答案:

将目录添加到虚拟环境的一种方法是安装virtualenvwrapper(这对很多东西很有用)然后再做

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path
Run Code Online (Sandbox Code Playgroud)

如果要删除这些路径,请编辑该文件 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` (5认同)

Arj*_*ies 13

您可以创建.pth包含要搜索的目录的文件,并将其放在site-packages目录中.例如:

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

效果与添加/some/library/path到设置sys.path本地相同virtualenv.

  • 我真的很喜欢这种方法; 并不像添加线来激活/停用那样变幻无常,也不需要使用virtualenvwrapper.如果您不想调用python来查找site-packages目录,那么它位于相当可预测的路径`$ VIRTUALENV_ROOT/lib/pythonX.Y/site-packages`..pth文件的文档:https://docs.python.org/3.6/library/site.html (6认同)
  • 我不想输入绝对路径,因为我的工作区在文件系统中移动。而且,我的项目路径中有空格。因此,我键入了稍微修改的命令:```pushd“ $(venv / bin / python -c” from distutils.sysconfig import get_python_lib; print(get_python_lib())“)...路径/到/项目/ venv /lib/python3.7/site-packages ... path / to / project echo ../../../../src> my_project.pth popd```然后我停用了我的virtualenv,然后重新激活了它。现在,我可以运行需要知道我的项目目录在哪里的项目代码。 (2认同)
  • 这是正确的答案。修改供应商提供的脚本(`/ bin / activate`)是不当行为,安装第3方工具不如使用内置方法来实现。 (2认同)
  • 伟大的!作为一个小评论,我的 3.10 virtualenv 说:“DeprecationWarning:distutils 包已被弃用,并计划在 Python 3.12 中删除。使用 setuptools 或检查 PEP 632 寻找潜在的替代方案`和`DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead`。 (2认同)