如何使用setup.py安装托管在私有PyPI中的软件包?

时间:2013-09-16 13:05:28

标签: python setuptools pypi

我正在尝试为私有项目编写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...

我错过了什么?

非常感谢!

3 个答案:

答案 0 :(得分:15)

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

  

要使用它,请运行“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>

希望这会有所帮助。

答案 1 :(得分:0)

默认情况下会忽略

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"
]

答案 2 :(得分:0)

您可以将您的软件包制作为普通的pip软件包,然后将其发布到私人仓库中。要安装它,可以在config file中指定全局选项role_id

--extra-index-url