2016-06-15 159 views
2

我想获得需要python 3.5的回购的虚拟环境。我使用的是Debian,从我所知道的情况来看,python 3.5没有aptitude包。阅读了一些文章后,建议下载3.5源代码并编译它。Python 3.5安装pyvenv

运行make和install后,python3.5被安装到/ usr/local/bin。我将它添加到$ PATH变量中。

这是我遇到问题的地方。在我跑完之后:

$ cd project-dir 
$ pyvenv env 
$ source env/bin/activate 
$ pip install -r requirements.txt 

我遇到了需要sudo来安装正确软件包的问题。我跑了:

$ which pip 

并且事实证明pip仍在使用pip的/ usr/local/bin版本。

$ echo $PATH 

返回

/home/me/project-dir/env/bin:/usr/local/bin:/usr/bin:/bin: ... 

我假设,因为在/ usr /本地路径虚拟环境在我的PATH变量path后问世,它是使用版本点子,而不是我的虚拟环境。

在virtualenv中运行正确版本的pip的最佳方式是什么?我能想到的两个选项是将二进制文件移动到/ usr/bin或修改我的虚拟env中的激活脚本,以将virtualenv路径放在/ usr/local之后。

回答

2

Kesh的回答让我朝着正确的方向前进。

问题是我实际上没有在我的venv中安装pip。

事实证明,当我从源码构建python3.5时,我没有libssl-dev包。它看起来像ensurepip的依赖关系之一是没有安装的python ssl包,因为我没有libssl-dev。

为了解决这个问题,我重新安装了libssl-dev软件包来重新安装python 3.5。重建的python现在包含了ssl包,它允许surepip在我的虚拟环境中安装pip。

+0

很高兴听到我的回答让你朝着正确的方向前进! –

+0

希望你支持我的答案,并投票赞成! –

1

尝试在本地安装它:

pip install --user -r requirements.txt 

这会,我相信,安装文件在你$HOME目录的子目录(其中虚拟ENV相信还是会设置)。否则,我认为你可以只使用:

/path/to/virtualenv/pip install -r requirements.txt 
+0

- 用户将软件包安装到系统,而不是virtualenv。 我认为第二个选项可以工作,但它不需要输入项目路径就可以删除virtualenvs的一个很好的功能。 – knelson

2

选项1 您可以手动执行升级在虚拟环境中PIP

pip install -U pip 

选项2 升级里面那个点子好方法软件包 python -m ensurepip --upgrade确实会升级系统中的pip版本(如果它低于ensurepip中的版本)。

您都面临这个问题,因为VENV使用ensurepip添加PIP到新环境:

除非--without-PIP选项,则ensurepip将被调用到 引导PIP到虚拟环境。

Ensurepip软件包不会从互联网下载或从其他地方抓取文件,因为所有必需的组件都已包含在软件包中。这样做会增加安全漏洞,因此不受支持。

Ensurepip不是为了给你最新的点子,而是“a”点。要获得最新的人在本文开头使用手动方式。

要检查ensurepip版本,你可以键入蟒蛇控制台进一步阅读import ensurepip print(ensurepip.version())

更多调查结果:

  1. 升级ensurepip使用手动档 - https://github.com/python/cpython/commit/f649e9c44631c07e707842c42747b651b986dcc4
  2. What's the proper way to install pip, virtualenv, and distribute for Python?
  3. Comprehensive beginner's virtualenv tutorial?