搭建本地pypi仓库

搭建本地pypi仓库

经过一番技术选型, 决定使用pypiserver进行私有化pypi仓库部署。

1. 拉取镜像:

docker pull pypiserver/pypiserver:latest

2. 启动容器:

docker run -p 80:8080 -v ~/.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest run 
-p 8080 -P /data/.htpasswd -a "update,download,list" --fallback-url "https://pypi.tuna.tsinghua.edu.cn/simple" packages

其中:

  • -p 是指定服务端口
  • -P 是指定认证用户及密码文件
  • -a 表示update, download, list都需要走认证
  • --fallback-url 表示如果找不到包就去指定连接找

3. 可直接通过端口访问web界面

4. 打包上传

打包

python 项目添加setup.py即可打包上传。简易的setup.py如下:

from setuptools import setup, find_packages

setup(
    name="项目名称",
    version="1.0.0",
    description="项目描述",
    packages=find_packages(),
    install_requires=[
        "fastapi>=0.104.0",
        "uvicorn[standard]>=0.24.0",
        "pydantic>=2.0.0",
    ],
    python_requires=">=3.8",
    author="作者",
    author_email="邮箱",
    url="项目主页, 一般为github",
    classifiers=[
        "Development Status :: 4 - Beta",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: MIT License",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
        "Programming Language :: Python :: 3.10",
        "Programming Language :: Python :: 3.11",
    ],
)

接下来源码打包:

python setup.py sdist

二进制打包:

python setup.py bdist

更多参考如何发布自己的python包到pypi

上传

配置.pypirc, 各系统路径如下:

  • Linux/macOS: ~/.pypirc
  • Windows: %USERPROFILE%.pypirc

内容如下:

[distutils]
index-servers = 
    local


[local]
repository=http://xxx.xxx.xxx.xxx:8888
username = xxx
password = xxx

执行如下命令python setup.py sdist upload -r local上传

常见问题

如果报错AssertionError: unsupported schema通常是因为.pypirc路径不对,或是配置不对。

删除包

删除包有两种方式:

  1. 通过http请求
  2. 直接删除包中的指定包

此处仅仅介绍http请求方式:

curl --form ":action=remove_pkg" --form "name=包名" --form "version=版本" http://用户名:密码@http://xxx.xxx.xxx.xxx:8888/
posted @ 2025-08-13 20:42  汗牛充栋  阅读(155)  评论(0)    收藏  举报