【问题标题】:How can I install packages hosted in a private PyPI using setup.py?如何使用 setup.py 安装托管在私有 PyPI 中的包?
【发布时间】:2013-09-20 15:35:13
【问题描述】:

我正在尝试为一个私有项目编写setup.py 安装文件,该项目同时具有公共和私有依赖项。公共的托管在 PyPI 上,而私有的托管在运行 simplepypi 的服务器上。

我希望在安装期间解析和获取公共和私有依赖项。

我因此将我的依赖项添加到setup.py

setup(
    ...
    install_requires = [
        # public dependencies
        'argparse==1.2.1',
        'beautifulsoup4==4.1.3',
        'lxml==3.1.0',
        'mongoengine==0.8.2',
        'pymongo==2.5.2',
        'requests==1.1.0',
        'Cython==0.18',
        # private dependencies
        'myprivatepackage1',
        'myprivatepackage2'
    ],
    dependency_links=['http://pypi.myserver.com/packages'],
    ...
)

我使用命令python setup.py sdist 构建包tarball,并使用pip install --verbose path/to/tarball.tar.gz 将其安装在激活的virtualenv 中。

但是,pip 日志行在任何地方都没有提到我的私有 PyPI 服务器,而且https://pypi.python.org/simple/ 似乎已经被查询了两次。

Running setup.py egg_info for package from file:///home/b/code/mapado/mypackage/dist/mypackage-0.5.1.tar.gz
    running egg_info
    creating pip-egg-info/mypackage.egg-info
    writing requirements to pip-egg-info/mypackage.egg-info/requires.txt
    writing pip-egg-info/mypackage.egg-info/PKG-INFO
    writing top-level names to pip-egg-info/mypackage.egg-info/top_level.txt
    writing dependency_links to pip-egg-info/mypackage.egg-info/dependency_links.txt
    writing manifest file 'pip-egg-info/mypackage.egg-info/SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found
    
    reading manifest file 'pip-egg-info/mypackage.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'pip-egg-info/mypackage.egg-info/SOURCES.txt'
Downloading/unpacking myprivatepackage (from mypackage==0.5.1)
  Could not fetch URL https://pypi.python.org/simple/myprivatepackage/: HTTP Error 404: Not Found (myprivatepackage does not have any releases)
  Will skip URL https://pypi.python.org/simple/myprivatepackage/ when looking for download links for myprivatepackage (from mypackage==0.5.1)
  Could not fetch URL https://pypi.python.org/simple/myprivatepackage/: HTTP Error 404: Not Found (myprivatepackage does not have any releases)
  Will skip URL https://pypi.python.org/simple/myprivatepackage/ when looking for download links for myprivatepackage (from mypackage==0.5.1)
  Could not find any downloads that satisfy the requirement myprivatepackage (from mypackage==0.5.1)
Cleaning up...

我错过了什么?

【问题讨论】:

    标签: python setuptools pypi


    【解决方案1】:

    您可以将您的包制作为普通的 pip 包并将其发布到私有仓库。要安装它,您可以在config file 中指定全局选项--extra-index-url

    $ cat ~/.pip/pip.conf
    [global]
    extra-index-url = https://...
    

    【讨论】:

      【解决方案2】:

      看起来您没有像simplepy 的文档那样指定您的主机,说您需要使用良好的主机名设置您的~/.pypirc,例如

      要使用它,请运行“simplepypi”。您可以通过以下方式上传包:

      Modify your ~/.pypirc so it looks like:
      
          [distutils]
          index-servers =
              pypi
              local
      
          [local]
          username: <whatever>
          password: <doesn't matter, see above>
          repository: http://127.0.0.1:8000
      
          [pypi]
          ...
      

      然后你就可以上传你的包了

      python setup.py sdist upload -r local
      

      并且可以从那里安装它

      pip install -i http://127.0.0.1:8000/pypi <your favorite package>
      

      希望这会有所帮助。

      【讨论】:

      • 我修好了!我的错误是,正如您所指出的,我需要将"http://127.0.0.1:8000/pypi/" URL 添加到dependency_links警告:它必须是 "http://127.0.0.1:8000/pypi/" 而不是 "http://127.0.0.1:8000/pypi",因为后者返回 404。
      • 我可以在修改~/.pypirc的情况下这样做吗?也就是说,纯粹是通过setup.py?
      【解决方案3】:

      dependency_links 默认被忽略(至少在 pip 9.0.1 中)

      为了让它连接到您的服务器,您需要添加--process-dependency-links

      我相信pip 10 will bring a new mechanism,但现在这对我有用

      我还必须更新 dependency_links 以包含包名称,例如:

      dependency_links=[
          "http://internal-pyp:5678/simple/your_package_name"
      ]
      

      【讨论】:

        猜你喜欢
        • 2019-01-24
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2018-07-11
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 2021-09-01
        相关资源
        最近更新 更多