Python3 虚拟环境与 PIP

17

我想在完全通过 Python3.3 解释的虚拟环境中尝试。在我的系统上(Ubuntu 13.04),有两种创建虚拟环境的方式。

virtualenv env
或者:
pyvenv-3.3 env
如果我使用老牌工具 virtualenv ,我可以按预期使用所有内容,但是PIP会将所有内容安装到python2.7 libs而非python3.3 libs中。因此,在调用脚本时。
python3 script.py 

似乎还没有起作用:

python script.py 

效果惊人,但显然必须使用Python2.7。


现在,如果我使用Python3+中的“内置”venv(pyvenv-3.3)代替,似乎一切都变得有些混乱。它会在venv中正确放置python3.3 lib文件夹,但是使用PIP安装模块不再可行,因为它似乎某种方式引用的是全局而不是虚拟环境。

那么,关于我的问题:

您如何建议获得仅具有Python3.3(+)并将PIP安装到python3.3 libs的工作虚拟环境?


1
哎呀,奇怪。我运行了 pyvenv-3.3 env 然后 source env/bin/activate 然后 wget http://python-distribute.org/distribute_setup.py 然后 python distribute_setup.py 然后 easy_install pip 然后 pip install simple-date,但它试图安装在系统库中。听起来像是同样的问题。而且这是在 opensuse 上。似乎有个 bug。 - andrew cooke
是的,似乎访问了系统而不是虚拟环境。这很奇怪,因为它是一个虚拟环境。 - Brandon Bertelsen
7个回答

52

您可以考虑尝试类似以下的操作:

  1. 创建您的虚拟环境

    $ python3 -m venv myvenv
    $ source myvenv/bin/activate
    (myvenv)$
    
  2. 按照官方pip安装说明(https://pip.pypa.io/en/stable/installing/)安装pip。 从pip v1.5.1开始,您无需在安装pip之前手动安装setuptools。

  3. (myvenv)$ curl https://bootstrap.pypa.io/get-pip.py | python
    
  4. 禁用然后重新启用您的虚拟环境。 这样做或者 pip 将无法正常工作。

  5. (myvenv)$ deactivate
    $ source myvenv/bin/activate
    (myvenv)$ which pip
    

更详细的回答:

是的,我也遇到了类似的问题。这与您系统上存在的其他Python和pip以及未安装的pip有关,就像您通常使用的非“核心”虚拟环境一样。

由于某种原因,venv模块不会安装setuptools和pip。

我尝试了上述方法,目前看起来不错。

Python 3.3中的venv本身不会安装pip:

常用的安装工具,如Distribute和pip,与venvs一起正常工作 - 也就是说,在venv处于活动状态时,它们会在venv中安装Python包,而不需要明确告诉它们要这样做。当然,您需要先将它们安装到venv中。

Python 3.4中的venv实现默认安装pip。

从3.4版本开始:默认安装pip

http://docs.python.org/3/library/venv.html

您可以使用which pippip -V检查pip。如果您没有停用/启用venv,pip -V将不能显示正确的pip版本,但是which pip仍可能显示正确的路径。


我有一个和Matt类似的解决方案,只是我使用的是Mac。步骤基本相同。我在这里记录了这些步骤:http://blog.troygrosfield.com/2014/01/09/python3-virtual-environments/ - Troy Grosfield
1
在Ubuntu 12.04 LTS上运行得非常好。 - amertkara
3
值得注意的是,在使用pip之前,应该重新激活venv,否则所使用的pip版本仍将是系统版本。 - Robert Kleinsasser
我正在使用Python3.6,pip默认已安装。输入'python3.6 -m venv <path/to/install>'来安装。然后输入'source path/to/install/bin/activate'激活虚拟环境,最后运行'pip --version'。 - Py_minion

7

以下是我是如何做到的(我使用的是Ubuntu 12.04)。

首先,在一个文件夹中安装Python 3.3,例如 /opt/python3。然后运行以下命令:

/opt/python3/bin/pyvenv-3.3 ~/py3  # pyvenv is python3's built-in virtualenv
source ~/py3/bin/activate
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python
easy_install-3.3 pip 

5

最新版本的pip有一个pip3函数,可以安装到您默认的Python3实例中。

pip3 install python_lib

如果您的系统上同时安装了Python 2.x和3.y版本,pip将会安装在Python 2.x中,而pip3则会安装在Python 3.y中。


1
那不是让事情变得更容易了吗。 - Brandon Bertelsen

2
这对我行之有效:

这对我行之有效:

> virtualenv-3.3 env
...
> source env/bin/activate
> pip install simple-date
...
> python
Python 3.3.0 (default, Mar 27 2013, 20:56:52) 
[GCC 4.7.2 20130108 [gcc-4_7-branch revision 195012]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import simpledate
>>>

很遗憾,我不确定当时是如何安装virtualenv-3.3的。我猜测可能是这样做的:

> wget http://python-distribute.org/distribute_setup.py
> python3.3 distribute_setup.py
> easy_install-3.3 virtualenv

[编辑:是的,我的笔记在http://www.acooke.org/cute/GettingPyt0.html也证实了这一点]

请注意,这是一个特定于python-3.3的虚拟环境。

正如评论中所述,我无法让pyvenv-3.3工作。


+1 不过,我真的在寻找一个使用pyvenv-3.3的可行解决方案,因为我对新的内置venv的一些功能很感兴趣。无论如何,感谢你的尝试。 - Brandon Bertelsen

1
我使用PPA ppa:fkrull/deadsnakes来在我的Elementary Os(一种基于Ubuntu的Linux发行版)上安装Python 3.4。
需要说明的是,在Python 3.4 Ubuntu软件包中,当你创建一个虚拟环境(使用pyvenv-3.4命令)时,pip被安装在local/bin而不是bin目录下。
因此,为了使用它,你需要修改bin/activate脚本的第44行。应该改为:
PATH="$VIRTUAL_ENV/bin:$VIRTUAL_ENV/local/bin:$PATH"

1
我在OS X上遇到了同样的问题。看起来即使是由easy_install放置在bin/中的pip可执行文件仍然适用于Python 2。如果您使用pip3可执行文件(或其变体),它应该可以正常工作!

0

文档中已经很好地提到了:

常见的安装工具如Distribute和pip与venv协同工作良好-即当venv处于活动状态时,它们会把Python包安装到venv中,无需明确告知。 **当然,您需要先将它们安装到venv中:可以通过在启用venv的情况下运行distribute_setup.py,然后运行easy_install pip来完成此操作**。另外,您还可以下载源代码压缩包,在解压后启用venv,然后运行python setup.py install。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接