搭建pypi本地私有仓库之二(docker-compose方式)

     前面有pypi本地私有仓库的两种创建方式
      windows 搭建私有PyPI仓库之三(本地)
      https://www.cnblogs.com/aozhejin/p/19265959
     搭建私有PyPI仓库之一(docker方式)
     https://www.cnblogs.com/aozhejin/p/19265738
      
      pypiserver 是一个极简的 PyPI 兼容服务器,支持 pip 或 easy_install。 提供来自常规目录的package。 whl、bdists、eggs及相关PGP签名都可以上传 无论是用PIP、setuptools、Twine、pypi-uploader,还是直接复制 与SCP合作。windows下支持不并不好,如果你通过 pip install pypi 下载、命令行启动pypi会比较麻烦,所以下面
     
    
利用 docker-compose 安装pypi server
           
      这种方式比较简单,但是需要你提前安装docker,目前机器上安装有docker desktop 环境,所以docker环境具备
           
     1、我们只需要创建docker-compose.yml
             
version: '3.7'

services:
  pypi-server:
    image: pypiserver/pypiserver:latest   #镜像将从docker hub上下载
    ports:
      - 8080:8080  #访问端口号 即http://域名:端口号
    volumes:
      - type: volume
        source: pypi-server
        target: /data/packages  #python包放置的目录
    command: -P . -a . /data/packages
    restart: always

volumes:
  pypi-server:

       2.进入cmd命令行,执行 

D:\pypi>docker-compose up -d --build
time="2025-11-22T20:44:30+08:00" level=warning msg="D:\\pypi\\docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
[+] Running 11/11
 ✔ pypi-server Pulled                                                                                             15.8s
   ✔ c9ebb165a315 Pull complete                                                                                    0.8s
   ✔ f03511615e47 Pull complete                                                                                    9.4s
   ✔ 2665be2baf2b Pull complete                                                                                    0.4s
   ✔ ccf84ef69d96 Pull complete                                                                                    1.8s
   ✔ 8534c94cd38e Pull complete                                                                                    1.7s
   ✔ 3dff85a7126f Pull complete                                                                                    9.2s
   ✔ 0a9a5dfd008f Pull complete                                                                                    2.9s
   ✔ 645dc30e2c53 Pull complete                                                                                    3.3s
   ✔ 05784fda19ca Pull complete                                                                                    9.3s
   ✔ 460b78d5e9c6 Pull complete                                                                                    7.9s
[+] Running 3/3
 ✔ Network pypi_default          Created                                                                           0.3s
 ✔ Volume pypi_pypi-server       Created                                                                           0.0s
 ✔ Container pypi-pypi-server-1  Started                                                                           1.4s

        3.查看docker desktop      

       image

         4. 打开浏览器 http://localhost:8080
           

        image
          5.创建要上传的项目mypackage

          6.编写setup.py

from setuptools import setup, find_packages
setup(
    name = 'mypackage', #应用名
    py_modules=['mypackage'],
    author = 'aozhejin',#作者
    version = '1.0',  #版本号
    description="这是一个测试模块",
    author_email="aozhejin@163.com",
    packages = find_packages(),  #包括在安装包内的Python包
    include_package_data = True, #启用清单文件MANIFEST.in,包含数据文件
    #排除文件
    exclude_package_data = {'docs':['mypackage.txt']},
    #自动安装依赖
    install_requires = [
        'Flask>=0.10',
    ],

)

     建立mypackge子目录,包括 getfuncmoule  子目录,以及__init_.py myfunc.py 等 这些实际都很简单,这里就忽略了。 我之前文章里面有      
    项目结构如下: 

      image

             7.进行tar.gz打包,生成分发包
            

PS C:\Users\king\PycharmProjects\PythonProject\mypackage> python setup.py sdist
running sdist
running egg_info
creating mypackage.egg-info
writing mypackage.egg-info\PKG-INFO
writing dependency_links to mypackage.egg-info\dependency_links.txt
writing requirements to mypackage.egg-info\requires.txt
writing top-level names to mypackage.egg-info\top_level.txt
writing manifest file 'mypackage.egg-info\SOURCES.txt'
file mypackage.py (for module mypackage) not found
reading manifest file 'mypackage.egg-info\SOURCES.txt'
writing manifest file 'mypackage.egg-info\SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md

running check
creating mypackage-1.0
creating mypackage-1.0\mypackage
creating mypackage-1.0\mypackage.egg-info
creating mypackage-1.0\mypackage\getfuncmodule
copying files to mypackage-1.0...
copying setup.py -> mypackage-1.0
copying mypackage\__init__.py -> mypackage-1.0\mypackage
copying mypackage\myfunc.py -> mypackage-1.0\mypackage
copying mypackage.egg-info\PKG-INFO -> mypackage-1.0\mypackage.egg-info
copying mypackage.egg-info\SOURCES.txt -> mypackage-1.0\mypackage.egg-info
copying mypackage.egg-info\dependency_links.txt -> mypackage-1.0\mypackage.egg-info
copying mypackage.egg-info\requires.txt -> mypackage-1.0\mypackage.egg-info
copying mypackage.egg-info\top_level.txt -> mypackage-1.0\mypackage.egg-info
copying mypackage\getfuncmodule\__init__.py -> mypackage-1.0\mypackage\getfuncmodule
copying mypackage\getfuncmodule\subtraction.py -> mypackage-1.0\mypackage\getfuncmodule
copying mypackage.egg-info\SOURCES.txt -> mypackage-1.0\mypackage.egg-info
Writing mypackage-1.0\setup.cfg
creating dist
Creating tar archive
.....

        查看生成的

PS C:\Users\king\PycharmProjects\PythonProject\mypackage> tree /f
卷 Windows 的文件夹 PATH 列表
卷序列号为 F023-2216
C:.
│  setup.py
│  
├─dist
│      mypackage-1.0.tar.gz
│      
├─mypackage
│  │  myfunc.py
│  │  __init__.py
│  │  
│  ├─getfuncmodule
│  │      subtraction.py
│  │      __init__.py
│  │      
│  └─__pycache__
│          myfunc.cpython-314.pyc
│          __init__.cpython-314.pyc
│          
├─mypackage-1.0
│  │  PKG-INFO
│  │  setup.cfg
│  │  setup.py
│  │  
│  ├─mypackage
│  │  │  myfunc.py
│  │  │  __init__.py
│  │  │  
│  │  └─getfuncmodule
│  │          subtraction.py
│  │          __init__.py
│  │          
│  └─mypackage.egg-info
│          dependency_links.txt
│          PKG-INFO
│          requires.txt
│          SOURCES.txt
│          top_level.txt
│          
└─mypackage.egg-info
        dependency_links.txt
        PKG-INFO
        requires.txt
        SOURCES.txt
        top_level.txt

         8.把tar.gz包,复制到 容器内的/data/packages里面
           语法为: 
                  docker cp 容器id/容器名:容器内目录  宿主机目录
                  docker cp 本地文件路径 容器ID/容器NAME:容器内目录

   C:\Users\king>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0ea0dec97a8 pypiserver/pypiserver:latest "/entrypoint.sh -P .…" 46 minutes ago Up 46 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp pypi-pypi-server-1

 C:\Users\king\PycharmProjects\PythonProject\mypackage> docker cp ./dist/mypackage-1.0.tar.gz d0ea0dec97a8:/data/packages
Successfully copied 2.05kB to d0ea0dec97a8:/data/packages

        9.浏览仓库 ,我们已经可以看到上传的包

image

             我们再上传一个 standard_cgi-3.13.0.tar.gz 包(cgi官方包,手工下载)

        

image

         10.拉取仓库包进行安装
          注意: 拉取的时候 地址形式为 http://域名:端口号/packages/包名

C:\Users\king>pip install  http://localhost:8080/packages/standard_cgi-3.13.0.tar.gz
Collecting http://localhost:8080/packages/standard_cgi-3.13.0.tar.gz
  Downloading http://localhost:8080/packages/standard_cgi-3.13.0.tar.gz (17 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: standard-cgi
  Building wheel for standard-cgi (pyproject.toml) ... done
  Created wheel for standard-cgi: filename=standard_cgi-3.13.0-py3-none-any.whl size=12810 sha256=5d38b54218118a9d019419aaf3e188896adf1fb59fdc5abe5b9e92a70580fbe1
  Stored in directory: c:\users\king\appdata\local\pip\cache\wheels\fe\84\be\2628f243102b5e079bea1a31e2716526d0c2e690540d0efcd6
Successfully built standard-cgi
Installing collected packages: standard-cgi
Successfully installed standard-cgi-3.13.0

       11.查看包安装情况    

D:\pypi>pip show standard-cgi
Name: standard-cgi
Version: 3.13.0
Summary: Standard library cgi redistribution. "dead battery".
Home-page: https://github.com/youknowone/python-deadlib
Author:
Author-email: Python Developers <python-deadlib@youknowone.org>
License: PSF-2.0
Location: C:\Users\king\AppData\Local\Programs\Python\Python314\Lib\site-packages
Requires:
Required-by:

 

参考
    https://pypi.org/project/pypiserver/#using-the-docker-image
    https://hub.docker.com/r/pypiserver/pypiserver
    https://github.com/pypiserver/pypiserver
posted @ 2025-11-22 10:37  jinzi  阅读(0)  评论(0)    收藏  举报