Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在virtualenv中安装Python easy_会导致setuptools错误_Python_Python 2.7_Virtualenv_Pip_Easy Install - Fatal编程技术网

在virtualenv中安装Python easy_会导致setuptools错误

在virtualenv中安装Python easy_会导致setuptools错误,python,python-2.7,virtualenv,pip,easy-install,Python,Python 2.7,Virtualenv,Pip,Easy Install,还有许多其他StackOverflow问题与此类似,但在每种情况下,平台不同,错误消息不同,或者解决方案无效或过时。我正在尝试设置Python2.7.6 virtualenv并在其中安装模块,但easy_install会给我错误,表明setuptools不可用。但是AFAIK easy_install是setuptools的一部分,所以这毫无意义 问题只发生在虚拟电视中。以下是我所做的: 创建了一个全新的Red Hat 5虚拟机 执行了yum-y更新以获取最新资料,然后重新启动 下载Pytho

还有许多其他StackOverflow问题与此类似,但在每种情况下,平台不同,错误消息不同,或者解决方案无效或过时。我正在尝试设置Python2.7.6 virtualenv并在其中安装模块,但easy_install会给我错误,表明setuptools不可用。但是AFAIK easy_install是setuptools的一部分,所以这毫无意义

问题只发生在虚拟电视中。以下是我所做的:

  • 创建了一个全新的Red Hat 5虚拟机
  • 执行了
    yum-y更新
    以获取最新资料,然后重新启动
  • 下载Python-2.7.6.tar.gz,解压缩,
    /configure;制作sudo make安装
  • 确认
    python-V
    给了我2.7.6,而
    sudopython-V
    也给了我2.7.6
  • wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
  • 修改了ez_setup.py,将
    --no check certificate
    标志添加到wget,以解决网络中的代理服务器问题
  • sudo python ez_setup.py
  • sudo easy\u安装pip
  • sudo pip安装virtualenv
  • virtualenv virtpy
  • 。virtpy/bin/activate
  • easy\u install elementtree
除最后一个步骤失败外,所有这些步骤都成功:

Traceback (most recent call last):
  File "/home/gperrow/virtpy/bin/easy_install", line 7, in <module>
    from setuptools.command.easy_install import main
  File "/home/gperrow/virtpy/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 44, in <module>
    from setuptools.package_index import PackageIndex
  File "/home/gperrow/virtpy/lib/python2.7/site-packages/setuptools/package_index.py", line 203, in <module>
    sys.version[:3], require('setuptools')[0].version
  File "/usr/local/bin/scripts/pkg_resources.py", line 584, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/bin/scripts/pkg_resources.py", line 482, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
pkg_resources.DistributionNotFound: setuptools
回溯(最近一次呼叫最后一次):
文件“/home/gperrow/virtpy/bin/easy_install”,第7行,在
从setuptools.command.easy\u安装导入主
文件“/home/gperrow/virtpy/lib/python2.7/site packages/setuptools/command/easy_install.py”,第44行,在
从setuptools.package\u索引导入PackageIndex
文件“/home/gperrow/virtpy/lib/python2.7/site packages/setuptools/package_index.py”,第203行,在
sys.version[:3],需要('setuptools')[0]。版本
文件“/usr/local/bin/scripts/pkg_resources.py”,第584行,在require中
需要=自我解析(解析需求(需求))
文件“/usr/local/bin/scripts/pkg_resources.py”,第482行,解析中
提升分配未找到(req)#XXX在此处输入更多信息
pkg_resources.DistributionNotFound:设置工具

我从一个干净的虚拟机开始,我没有做什么真正不寻常的事情,但我发现“easy_install”什么都不是。我是做错了什么,还是错过了一个或多个步骤?

我不知道为什么会出现错误,但我相信有一种系统的方法可以让您干净地安装自定义Python,包括一个工作pip和virtualenv。在下面,我将描述我将使用的过程

首先,出于多种原因,保持系统的Python不变。其中之一是Linux发行版的某些部分可能取决于其默认Python的细节。你不想弄坏这些部件。另一个原因是,安装到默认位置的普通Python可能会被原始Python的剩余部分弄糊涂(发行版可能有一个不同于普通版的特定Python/dist包/站点包目录布局)。这在实践中可能是,也可能不是一个真正的问题——您可以通过不覆盖系统的Python从概念上防止这些问题。另一个论点是,不需要将Python 2.7.6安装为root用户。以非特权用户(从这里开始称为“joe”)的身份安装它,并将其放入
/opt
或其他程序中。这将是一个干净的开始

设置完自定义Python后,自己创建一个小shell脚本,例如
setup.sh
,用于设置使用自定义Python版本的环境。确保调整和清洁环境。显然,这尤其会影响
PATH
PYTHONPATH
。我会确保
PYTHONPATH
未设置,并且
PATH
正确指向自定义安装。查看
env
并尝试确定是否还有任何东西可能以意外方式配置
python
。毕竟,要确保

$ command -v python
$ python -v
,被处决为乔,看右边

在正确的环境下,为自定义Python安装
pip
。根据,下载并执行它:
python get pip.py
。验证它是否已正确安装,以及您的环境是否仍然正确:

$ command -v pip
/CUSTOM/PYTHON/bin/pip

$ pip --version
pip 1.x.x from /CUSTOM/PYTHON/lib/python2.7/site-packages
此时,您应该确保您的环境不包含任何
VIRTUALENV.*
变量(可能是由您的发行版或任何组件设置的(不太可能,但值得检查))。如果设置了任何
VIRTUALENV*
变量,它很可能以意外的方式配置
VIRTUALENV
。摆脱这个(未设置或更改)。然后继续,通过
pip安装virtualenv
,使用新的
pip
virtualenv
安装到新的Python中。通过
pip install安装virtualenv的最新开发版本也值得一试https://github.com/pypa/virtualenv/tarball/develop

创建并激活新的虚拟环境。使用
命令-v pip
,验证
pip
是否来自虚拟环境。然后安装自定义软件包


注意:如果可能的话,我肯定会使用
pip
将东西安装到新的虚拟环境中,而不是
easy\u install
pip
很快将成为官方安装工具(它将包含在Python 3.4中)。如果出于某种原因,您确实依赖于
easy\u install
,这应该是可能的(虚拟环境提供了
easy\u install
命令),但为了确保您也应该通过
命令-v easy\u install

验证这一点,您的方法是正确的,其他答案(Jan Philip和Piotr的)也是如此,但你的问题很简单:

您使用的是旧安装的一部分
  ...
  File "/usr/local/bin/scripts/pkg_resources.py", line 669, in require  ## 584 is too old
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/bin/scripts/pkg_resources.py", line 572, in resolve  ## 482 is too old
    raise DistributionNotFound(req)
(virtpy)$ python -c "import pkg_resources; print pkg_resources"
<module 'pkg_resources' from '/home/you/virtpy/lib/python2.7/site-packages/pkg_resources.pyc'>
# not the obsoleted /usr/local/bin/scripts/...
scl enable python 
scl enable python27 bash