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

如何在已经创建的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的变量。如果您已经有一个,请检查它是否指向正确的

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

这里已经给出了答案->

UNIX/LINUX 将“export PYTHONPATH=/usr/local/lib/python2.0”添加到~/.bashrc文件中,并通过键入“source~/.bashrc”或“~/.bashrc”为其设置源代码

视窗XP 1) 转到控制面板 2) 双击系统 3) 转到“高级”选项卡 4) 点击环境变量


在“系统变量”窗口中,检查是否有名为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"
  • 初始化您的virtualenv
  • 只需输入以下命令设置或更改python路径:
  • 要检查python路径,请在python中输入:

  • 您可以创建一个包含要搜索的目录的
    .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