的virtualenv --no-站点包和PIP仍在寻找全球包?(virtualenv --no-s

2019-07-04 23:43发布

我是那个的印象virtualenv --no-site-packages将建立一个完全独立的隔离和Python环境,但它似乎没有。

例如,我有全球的装机量中的python-Django的,但希望创建一个不同的Django版本的virtualenv。

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django

从我所知道的, pip -E foo install上面应该重新安装Django的新版本。 另外,如果我告诉PIP冻结的环境中,我得到了一大堆包。 我期望与新的环境--no-site-packages ,这将是空白的?

$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...

我误解了如何--no-site-packages应该工作?

Answer 1:

我有这样一个问题,直到我意识到(很久以前我发现的virtualenv),我已经走了,我的.bashrc文件中添加目录到PYTHONPATH。 因为它已经超过一年事前,我没想到的是直线距离。



Answer 2:

最后,我发现,无论出于何种原因,PIP -E不能正常工作。 但是,如果我真的激活的virtualenv,并使用easy_install的通过的virtualenv提供安装点子,然后直接使用PIP从内,它似乎按预期运行,只有在virtualenv中显示包



Answer 3:

你必须确保你正在运行的pip在您创建的虚拟环境,而不是全球的一个二进制文件。

env/bin/pip freeze

看到测试:

我们创建具有的virtualenv中--no-site-packages的选项:

$ virtualenv --no-site-packages -p /usr/local/bin/python mytest
Running virtualenv with interpreter /usr/local/bin/python
New python executable in mytest/bin/python
Installing setuptools, pip, wheel...done.

我们检查的输出freeze从新创建的pip

$ mytest/bin/pip freeze
argparse==1.3.0
wheel==0.24.0

但是,如果我们使用全球pip ,这就是我们得到:

$ pip freeze
...
pyxdg==0.25
...
range==1.0.0
...
virtualenv==13.1.2

也就是说,所有软件包pip已安装在整个系统中。 通过检查which pip ,我们得到(至少在我的情况)类似/usr/local/bin/pip ,这意味着当我们pip freeze它在调用这个二元,而不是mytest/bin/pip



Answer 4:

我知道这是一个非常古老的问题,但对于那些到达此地寻找一个解决方案:

不要忘了激活的virtualenv( source bin/activate运行前) pip freeze 。 否则,你会得到全球所有包的列表。



Answer 5:

--no-site-packages应,顾名思义,从取出的标准site-packages目录sys.path 。 其他任何生活​​在标准Python路径将继续留在那里。



Answer 6:

暂时清除PYTHONPATH有:

export PYTHONPATH=

然后创建并激活虚拟环境:

virtualenv foo
. foo/bin/activate

只有这样:

pip freeze


Answer 7:

如果你直接调用脚本,在Windows上可能会出现类似的问题script.py然后使用Windows默认打开程序并打开Python的虚拟环境之外。 与调用它python script.py将使用Python与虚拟环境。



Answer 8:

这也似乎当你移动的virtualenv目录到另一个目录(在Linux上)发生,或重命名父目录。



Answer 9:

其中一个可能的原因的virtualenv点子行不通的,如果任何父文件夹必须在其名称空间/Documents/project name/app它重命名为/Documents/projectName/app解决了这个问题。



Answer 10:

这里是所有的PIP安装列表选项 -我没有找到任何“ -E ”选项,可能是旧版本了吧。 下面我分享一个纯英文的使用和工作virtualenv为即将到来的所以用户。


每一件事情似乎罚款,接受激活virtualenvfoo )。 它所做的是让我们有多个(和不同的)Python环境,即各种不同的Python版本,或不同的Django版本,或其他任何Python包 - 的情况下,我们在生产之前的版本,并希望测试最新的Django版本与我们应用。

总之创建和使用(激活)虚拟环境( virtualenv )能够运行或测试我们的应用程序或不同的Python解释器即Python 2.7版和3.3简单的Python脚本-可以是全新安装(使用--no-site-packages选项),或从现有的/最后的安装所有的软件包(使用--system-site-packages选择)。 要使用它,我们必须激活它:

$ pip install django将它安装到全局站点包,同样得到pip freeze会给全球站点包的名称。

而里面的VENV目录(富)执行$ source /bin/activate将激活VENV即现在PIP安装的东西才会被安装在虚拟ENV,现在才画中画冻结不会给全球站点包蟒蛇名单包。 一旦被激活:

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ cd foo
$ source bin/activate 
(foo)$ pip install django

(foo)的前$迹象表明,我们使用的是虚拟Python环境即与PIP任何东西-安装,冻结,卸载将被限制在这个VENV,以及对全球/默认Python安装/包没有影响。



Answer 11:

我有同样的问题。 (在Ubuntu),对我来说,问题是,我的路径名称包含$ 。 当我创建了$目录以外的virtualenv中,它工作得很好。

奇怪的。



文章来源: virtualenv --no-site-packages and pip still finding global packages?