如何在已经创建的virtualenv中设置pythonpath?
我应该编辑什么文件,如何编辑?我创建了一个虚拟环境。这里已经给出了答案-> UNIX/LINUX 将“export PYTHONPATH=/usr/local/lib/python2.0”添加到~/.bashrc文件中,并通过键入“source~/.bashrc”或“~/.bashrc”为其设置源代码 视窗XP 1) 转到控制面板 2) 双击系统 3) 转到“高级”选项卡 4) 点击环境变量如何在已经创建的virtualenv中设置pythonpath?,python,linux,unix,virtualenv,Python,Linux,Unix,Virtualenv,我应该编辑什么文件,如何编辑?我创建了一个虚拟环境。这里已经给出了答案-> UNIX/LINUX 将“export PYTHONPATH=/usr/local/lib/python2.0”添加到~/.bashrc文件中,并通过键入“source~/.bashrc”或“~/.bashrc”为其设置源代码 视窗XP 1) 转到控制面板 2) 双击系统 3) 转到“高级”选项卡 4) 点击环境变量 在“系统变量”窗口中,检查是否有名为PYTHONPATH的变量。如果您已经有一个,请检查它是否指向正确的
在“系统变量”窗口中,检查是否有名为PYTHONPATH的变量。如果您已经有一个,请检查它是否指向正确的目录。如果您还没有,请单击“新建”按钮并创建它 PYTHON代码 或者,您也可以执行以下代码:-
import sys
sys.path.append("/home/me/mypy")
这个问题最优雅的解决方案是 最初的答案仍然存在,但这是一个混乱的解决方案:
如果要更改virtualenv中使用的
PYTHONPATH
,可以将以下行添加到virtualenv的bin/activate
文件中:
export PYTHONPATH="/the/path/you/want"
这样,每次使用此virtualenv时都会设置新的PYTHONPATH
编辑:(回答@RamRachum的评论)
要使其恢复到停用
时的原始值,您可以添加
export OLD_PYTHONPATH="$PYTHONPATH"
在前面提到的行之前,将以下行添加到bin/postdactivate
脚本中
export PYTHONPATH="$OLD_PYTHONPATH"
@s29的评论应该是一个答案: 向虚拟环境添加目录的一种方法是安装virtualenvwrapper(这对许多事情都很有用),然后执行以下操作
mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path
如果要删除这些路径,请编辑文件myenvhomedir/lib/python2.7/site packages/\u virtualenv\u path\u extensions.pth
有关VirtualNVRapper的文档,请访问
有关此功能的具体文档,请访问
我修改了激活脚本以获取文件
.virtualenvrc
,如果它存在于当前目录中,并在激活/停用时保存/还原PYTHONPATH
。它是virtualenv 1.11.6创建的激活脚本的替代品
然后我在我的.virtualenvrc
中添加了类似的内容:
export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
您可以创建一个包含要搜索的目录的
.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
设置的本地。是否在停用时将其删除?因此这意味着新创建的虚拟环境具有默认的PYTHONPATH
(全局)而不是virtualenv本地路径?这对我来说非常有效,我没有使用VirtualEnvRapper。唯一需要注意的是,我没有这样的bin/postdactivate脚本,而activate有一个deactivate功能。因此,代码行应该放在那里,小心地将其包装在if语句中,作为函数中的其余操作。virtualenv默认情况下不这样做似乎很奇怪。Edit#2是个谎言!:)正确的答案是-1:它指向用户的PYTHONPATH,而不是virtualenv的PYTHONPATH。请检查它是否指向正确的目录。如果您还没有,请单击“新建”按钮并创建它。使用命令add2virtualenv是一个virtualenvwrapper
命令。它不是virtualenv
的一部分。删除:add2virtualenv-d
只是在我的答案中链接了这个答案,因为它比我真正喜欢的方法要好得多;不像添加行来激活/停用一样易变,也不需要使用VirtualVWrapper。如果您不想调用python来查找站点包目录,那么它位于相当可预测的路径$VIRTUALENV\u ROOT/lib/pythonX.Y/site packages
。.pth文件上的文档:我不想键入绝对路径,因为我的工作空间在文件系统中移动。而且,我的项目路径有空格。因此,我键入了稍加修改的命令: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
)是一种错误做法,安装第三方工具不如使用内置方式来实现同样的效果。请注意,试图实现这一点的人:必须添加现有文件系统路径(不必是python模块),否则路径将不会显示在sys.path
中。引用文档:“对于每个不同的头尾组合,它会查看它是否引用了现有目录,如果是,则将其添加到sys.path,并检查新添加的配置文件路径。”但是.pth和导出方法之间有重要区别。EXPORT将path添加到sys.path的begining中,但将.pth添加到end中。
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
python
\>\> import sys
\>\> sys.path
cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth