`pip freeze`在安装软件包时出现错误

11

我正在使用dependency_links安装一个包。看起来包已经成功安装,但破坏了pip freeze功能(这可能意味着存在更深层次的安装问题)。我想要能够从自定义服务器下载包,而不需要在运行setup.py之外进行任何设置。

这是我的setup.py文件:

from setuptools import setup

  setup(
      name='package'
      ,version='0.1.0'
      ,packages=['foo',
                 'bar'
                 ]
      ,long_description=''
      ,url='https://github.com/myrepo'
      ,install_requires=['numpy>=1.9.2'
                         ,'some_package'
                         ]
      ,dependency_links=[
          "http://custom_server/packages/some_package-0.1.0.tar.gz"
      ]               
  )

安装看起来没问题,但如果我尝试运行pip_freeze,我会得到下面的错误。

pip freeze

Error [Errno 20] Not a directory: '/Users/abc/anaconda/lib/python2.7/site-packages/some_package.egg' while executing command git rev-parse
Exception:
Traceback (most recent call last):
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/commands/freeze.py", line 70, in run
    for line in freeze(**freeze_kwargs):
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/operations/freeze.py", line 49, in freeze
    dependency_links
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/__init__.py", line 235, in from_dist
    if dist_is_editable(dist) and vcs.get_backend_name(location):
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/vcs/__init__.py", line 75, in get_backend_name
    if vc_type.controls_location(location):
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/vcs/git.py", line 266, in controls_location
    on_returncode='ignore')
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/vcs/__init__.py", line 322, in run_command
    spinner)
  File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/utils/__init__.py", line 677, in call_subprocess
    cwd=cwd, env=env)
  File "/Users/myname/anaconda/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/Users/myname/anaconda/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 20] Not a directory: '/Users/myname/anaconda/lib/python2.7/site-packages/some_package.egg'

我知道问题与它是一个蛋文件而不是蛋目录有关,但我不知道如何修复它。 - Chris
尝试在你的依赖链接中添加 #egg=some_package-0.1.0。 - irqed
当我运行pip freeze时,http://custom_server/packages/some_package-0.1.0.tar.gz#egg=some_package-0.1.0 给了我相同的错误。安装仍然有效,但它会破坏pip freeze :/ - Chris
有趣。我想知道为什么它说错误发生在“执行命令git rev-parse”时,你确定你没有从git repo安装吗?你是如何安装这个包的?pip install .还是python setup.py install?此外,我们可以尝试在设置调用中添加zip_safe=False - irqed
我正在使用 setup.py install。我是否需要在 setup.py 文件中添加 zip_safe?它似乎在 setup.py 的 cl 参数中不被识别为有效选项。 - Chris
1
这个命令可以正常工作:pip install . --extra-index-url http://10.XXX.XXX.XXX:YYYY/ --trusted-host 10.XXX.XXX.XXX。我必须添加“trusted host”和“extra index url”选项,并通过pip而不是setup.py进行安装,但这样可以避免破坏pip freeze。如果您将其发布为答案,我将接受并给予您奖励。 - Chris
1个回答

4
使用带有 --extra-index-url--trusted-hostpip install . 命令可以解决问题,如果想要以可编辑模式安装,则可以使用 pip install -e . 命令。
您可能还需要查看依赖项链接和 zip_safe 选项: https://pythonhosted.org/setuptools/setuptools.html#dependencies-that-aren-t-in-pypi https://pythonhosted.org/setuptools/setuptools.html#setting-the-zip-safe-flag https://github.com/irqed/octokit.py/blob/master/setup.py#L51 另外,您也可以在 pip 的 requirements.txt 文件中指定 --extra-index-url--trusted-host

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