【问题标题】:Python pip install gives “Command ”python setup.py egg_info“ failed with error code 1”Python pip install 给出“命令”python setup.py egg_info“失败,错误代码为 1”
【发布时间】:2017-06-30 20:32:03
【问题描述】:

编辑:是的,我知道this question 已经存在,只是我的问题有点不同,没有任何解决方案可以解决它。

我在工作时而不是在我的个人计算机上做大部分 Python 工作,但我决定也将它安装在我的个人计算机上。我全新安装了 python 3.6.1,并使用virtualenv 创建了一个虚拟环境。然后在 virtualenv 中我尝试 pip install urllib (或任何模块)并收到错误:

(pdbot) C:\Users\user\Documents\pdbot>pip install urllib
Collecting urllib
  Using cached urllib-1.21.1.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\user\AppData\Local\Temp\pip-build-50tn0wlb\urllib\setup.py", line 191
    s.connect((base64.b64decode(rip), 017620))
                                           ^
    SyntaxError: invalid token

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\user\AppData\Local\Temp\pip-build-50tn0wlb\urllib\

我在其他地方读到此错误与 setuptools 未正确安装有关。所以我运行这个来尝试解决这个问题:

easy_install -U setuptools

接下来我收到了一个更奇怪的错误:

(pdbot) C:\Users\zeke\Documents\pdbot>easy_install -U setuptools
Searching for setuptools
Reading https://pypi.python.org/simple/setuptools/
Downloading https://pypi.python.org/packages/a9/23/720c7558ba6ad3e0f5ad01e0d6ea2288b486da32f053c73e259f7c392042/setuptools-36.0.1.zip#md5=430eb106788183eefe9f444a300007f0
Best match: setuptools 36.0.1
Processing setuptools-36.0.1.zip
Writing C:\Users\zeke\AppData\Local\Temp\easy_install-jhg1val_\setuptools-36.0.1\setup.cfg
Running setuptools-36.0.1\setup.py -q bdist_egg --dist-dir C:\Users\zeke\AppData\Local\Temp\easy_install-jhg1val_\setuptools-36.0.1\egg-dist-tmp-8apak7kn
warning: no files found matching '*' under directory 'setuptools\_vendor'
Copying setuptools-36.0.1-py3.6.egg to c:\users\zeke\documents\pdbot\lib\site-packages
Adding setuptools 36.0.1 to easy-install.pth file
Installing easy_install-script.py script to c:\users\zeke\documents\pdbot\Scripts
Installing easy_install.exe script to c:\users\zeke\documents\pdbot\Scripts
error: [WinError 5] Access is denied: 'c:\\users\\zeke\\documents\\pdbot\\Scripts\\easy_install.exe'

这看起来像是权限错误,但我在管理员命令提示符 (Windows 10) 中运行了这两个并得到了相同的结果。我是这台计算机上的唯一用户,我拥有所有管理员权限。这个 virtualenv 会导致问题吗?我该如何补救?


编辑:我能够通过像这样利用 python 可执行文件来解决权限问题:

python -m easy_install -U setuptools

但它并没有解决python setup.py egg_info 问题。尝试pip install 任何东西时,我仍然收到此错误消息:

Command "python setup.py egg_info" failed with error code 1 in C:\Users\user\AppData\Local\Temp\pip-build-50tn0wlb\urllib\

python -m pip install urllibpip install urllib 我都试过了,都没有。

【问题讨论】:

  • 检查 `c:\\users\\zeke\\documents\\pdbot\\Scripts\\` 的属性并确保当前用户(您)可以编写、编辑文件
  • 它设置为只读,但更改后问题仍然存在。
  • 在属性中检查security 选项卡并检查您的用户的权限
  • 允许一切,它说我有完全的控制权。

标签: python pip installation packages


【解决方案1】:

我在尝试安装 urllib 时遇到了同样的问题,但是在做了pip search urllib 之后,我发现问题是由于 urllib 的版本引起的。来自搜索:

$ pip search urllib
...
> urllib5 (5.0.0)  - Just increment the number and create a new lib. Never fix the original one.

最后,一个简单的

pip install urllib5

在提升的外壳中解决了它。

【讨论】:

    【解决方案2】:

    您的问题与权限有关。相关/类似的工具setup_toolseasy_installpip 都倾向于对他们尝试在包安装文件夹中创建的文件和文件夹设置一组默认权限,而不是尝试匹配访问权限他们正在安装的位置。

    在 Linux 系统上,文件和文件夹分别具有权限,这经常被 sudo 命令绕过。在 Windows 上,相当于以管理员身份运行安装程序。由于您在控制台中,因此您必须打开具有管理员权限的控制台才能在其中运行pip 命令。

    值得注意的是,在 Windows 下,从管理员控制台使用 pip 安装的模块仍然可供系统的所有用户访问,这些用户在 PYTHONPATH 系统环境变量中具有正确的路径。然而,在 Linux 下,由于文件本身可能不具有其他用户的读取和执行权限,并且可能需要在安装后手动修改其权限,这一事实加剧了该问题。

    警告:urllib vs urllib2 vs urllibx

    其他两个答案都声称问题在于您没有在对 pip 的调用中指定正确的模块“版本”。两者都不正确,因为错误清楚地表明安装文件夹访问权限违规导致失败,但他们也错误地推荐了非常不安全的行为。

    pip install urllib != pip install urllib5 这是两个完全不同的包。
    pip (https://packaging.python.org/tutorials/installing-packages/#id17) 的文档清楚地说明了明确指定模块版本的方法是 pip install 'urllib==5'
    作为pip 实现的包管理引擎工作方式的一部分,运行命令pip install urllib 将始终尝试使用最新版本的urllib 包,因此您不需要指定版本,除非您有一些原因是您需要一个非常具体的模块版本。

    【讨论】:

    • 我应该注意到原始问题声称这是“在具有完全权限的管理控制台上”完成的。由于第二个代码 sn-p 的输出清楚地报告了当您无权创建文件时发生的确切错误,这绝对是权限问题。然而 Windows 很难解决这些类型的问题,因为没有简单的解决方案来查找/解决权限设置问题。
    【解决方案3】:

    为了回答您的问题,需要说明两点:

    1.你很幸运没有安装那个包!

    您尝试安装的软件包是恶意创建的 python 软件包,其设计看起来像一个真实的软件包(在本例中为 urllib3)。如果您安装了它,则该软件包将正常运行,除了它将有关您安装该软件包的系统的一些基本信息发送到一个 URL(您可以在此 here 上查看更多详细信息)。您可以通过以下任一链接了解有关此假包的更多信息:

    将有关您系统的基本信息发送给未知来源并不是您可以做的最糟糕的事情,但肯定是您希望尽可能避免的事情。

    2。要正确安装软件包...

    • 具体是urllib:

      要安装 urllib,您需要指定要安装的软件包的版本。例如,pip install urllib3

    • 一般的任何包:

      正如@Elisabote Coelho 所建议的,您可以使用pip search &lt;package-name&gt; 功能来查看可用的包。但是,这并不完美,因为它可能会列出您尝试安装的恶意库。一个好的指导方针是,您应该严格遵循软件包文档中的安装说明,以避免任何不可预见的问题。这只是生活在一个人们制作假装 python 包的世界中的不幸必需品。

    【讨论】:

    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2018-12-03
    • 2017-11-07
    • 1970-01-01
    • 2020-05-19
    • 2019-01-22
    • 2016-06-29
    相关资源
    最近更新 更多