首页 > 解决方案 > 如何在 setup.py 中使用自定义 PyPI 编写 Python 包?

问题描述

假设我没有互联网,并且自定义 PyPI 克隆运行在 10.0.0.2。

我想编写一个我的 Intranet 上的某个人可以安装的 Python 包。它具有依赖项 X,它存在于我的自定义 PyPI 克隆上。

如何编写我的包以便有人可以安装它,引入依赖项 X,而无需应用任何特殊的 pip 配置?也就是说,我如何创作我的包,以便安装它可以引入自定义 PyPI 依赖项?在此约束中,我只能编辑setup.py.

上下文是我正在使用一个托管服务,该服务接受一个带有 setup.py 文件的 tar'd Python 包,然后运行 ​​pip 来安装所有内容。我无权访问 pip 的调用方式或该系统上的任何环境配置。

有没有办法单独通过 setup.py 从 PyPI 的自定义 IP 地址中提取包?

标签: pythonpippython-packaging

解决方案


据我所知,您无法更新 setup.py 以将其指向从特定服务器下载依赖项。但是,执行 pip install 的人可以使用 -i 标志指定使用哪个服务器来查找包及其依赖项,如下所示

pip install -i http://localhost:8000 <package>

另一方面,可以在 setup.py 中指定依赖项。在 setuptools.setup 中,您可以像这样声明依赖项:

import sys

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="somepackage",
    version="0.0.1",
    author="Your Name",
    author_email="no.replies@example.com",
    description="Some desc",
    long_description=long_description,
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.8"
    ],
    install_requires=["dependency1", "dependency2"]
)

推荐阅读