我是那个的印象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
应该工作?
我有这样一个问题,直到我意识到(很久以前我发现的virtualenv),我已经走了,我的.bashrc文件中添加目录到PYTHONPATH。 因为它已经超过一年事前,我没想到的是直线距离。
最后,我发现,无论出于何种原因,PIP -E不能正常工作。 但是,如果我真的激活的virtualenv,并使用easy_install的通过的virtualenv提供安装点子,然后直接使用PIP从内,它似乎按预期运行,只有在virtualenv中显示包
你必须确保你正在运行的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
。
我知道这是一个非常古老的问题,但对于那些到达此地寻找一个解决方案:
不要忘了激活的virtualenv( source bin/activate
运行前) pip freeze
。 否则,你会得到全球所有包的列表。
--no-site-packages
应,顾名思义,从取出的标准site-packages目录sys.path
。 其他任何生活在标准Python路径将继续留在那里。
暂时清除PYTHONPATH
有:
export PYTHONPATH=
然后创建并激活虚拟环境:
virtualenv foo
. foo/bin/activate
只有这样:
pip freeze
如果你直接调用脚本,在Windows上可能会出现类似的问题script.py
然后使用Windows默认打开程序并打开Python的虚拟环境之外。 与调用它python script.py
将使用Python与虚拟环境。
这也似乎当你移动的virtualenv目录到另一个目录(在Linux上)发生,或重命名父目录。
其中一个可能的原因的virtualenv点子行不通的,如果任何父文件夹必须在其名称空间/Documents/project name/app
它重命名为/Documents/projectName/app
解决了这个问题。
这里是所有的PIP安装列表选项 -我没有找到任何“ -E
”选项,可能是旧版本了吧。 下面我分享一个纯英文的使用和工作virtualenv
为即将到来的所以用户。
每一件事情似乎罚款,接受激活virtualenv
( foo
)。 它所做的是让我们有多个(和不同的)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安装/包没有影响。
我有同样的问题。 (在Ubuntu),对我来说,问题是,我的路径名称包含$
。 当我创建了$目录以外的virtualenv中,它工作得很好。
奇怪的。