快速搭建私有pip镜像源

1. 快速体验

import os
import sys
import pathlib


def main(host='0.0.0.0', port=9000, package_path='./packages', fallback_url="https://pypi.doubanio.com/simple"):
    os.makedirs(package_path, exist_ok=True)
    python = pathlib.Path(sys.executable).absolute()
    pypi_server1 = python.parent / 'pypi-server.exe'
    pypi_server2 = python.parent / 'Scripts/pypi-server.exe'

    os.system(f"{python.__str__()} -m pip install pypiserver -i {fallback_url}")
    pypi_server = pypi_server1 if pypi_server1.exists() else pypi_server2
    cmd = f"{pypi_server.__str__()} -p {port} {package_path} --fallback-url {fallback_url}"
    
    print(cmd)
    print(f"please visit http://{host}:{port}/packages/ to view packages!")
    os.system(cmd)


if __name__ == '__main__':
    main()

1.1 安装和启动

pip install pypiserver
mkdir ~/packages 
cd ~/packages  
pip download faker  # 手动下载包
pypi-server  # pypiserver默认包存放路径是 ~/packages , 默认端口号是8080
  • 看到下面打印表示启动成功:
    快速搭建私有pip镜像源_第1张图片
  • 打开浏览器访问http://127.0.0.1:8080/
    快速搭建私有pip镜像源_第2张图片
  • 点击hear,即可看到刚下载的faker包
    快速搭建私有pip镜像源_第3张图片
  • 使用pip搜索,注意大小写
pip search -i http://localhost:8080  Faker

在这里插入图片描述

  • 使用pip安装
pip install -i http://127.0.0.1:8080/simple faker  # 本机
pip install -i http://192.168.0.235:8080 --trusted-host 192.168.0.235 faker # 非本机必须加----trusted-host 192.168.0.235,否则将安装失败

2. 进阶

2.1 指定监听端口

默认情况下 pypiserver 监听8080端口, 我们可以通过-p参数来指定期望的端口:

pypi-server -p 9090  # 修改默认8080端口
pypi-server -P ./packages  # 修改默认路径
pypi-server --fallback-url https://pypi.doubanio.com/simple  # 添加备用源,本地源找不到去备用源下载

2.2 打包和上传

  • 使用setuptools 打包
from setuptools import setup
setup(
    name='demo',
    version='1.0.0',
    packages=['demo']
)

在项目根目录下执行以下命令来生成Python代码分发包:

python setup.py sdist
cp ./dist/demo-0.0.1.tar.gz ~/packages/demo-0.0.1.tar.gz  # 将压缩包复制到pypi-server路径下

2.3 使用密码保护PyPI源

当希望使用密码来控制Python包的上传操作的时候, 需要使用Apache htpasswd 文件。

  1. 首次使用生成密码
apt-get install -y apache2-utils  
htpasswd -c ~/.pypipasswd zs # 使用apache2-utils工具包生成htpasswd文件,zs是用户名,回车提示输入密码
pip install passlib  # 使用passlib读取htpasswd文件
  1. 追加新的用户名和密码
htpasswd /root/.pypipasswd john  # 注意不能加-c,否则会覆盖已有的
  1. 使用密码文件来控制上传
pypi-server -P /root/.pypipasswd # -P参数来指定所要使用的密码文件

默认只有上传操作需要密码验证, 如果希望其他操作也需要密码验证, 可以添加参数 -a . ,指定某个操作需要密码-P foo/htpasswd.txt -a update,download-P . -a .表示不设置上传和下载的密码

你可能感兴趣的:(python,服务器,pip,linux,python)