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. 快速体验2. 进阶 - 打开浏览器访问http://127.0.0.1:8080/
快速搭建私有pip镜像源1. 快速体验2. 进阶 - 点击hear,即可看到刚下载的faker包
快速搭建私有pip镜像源1. 快速体验2. 进阶 - 使用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 文件。
- 首次使用生成密码
apt-get install -y apache2-utils
htpasswd -c ~/.pypipasswd zs # 使用apache2-utils工具包生成htpasswd文件,zs是用户名,回车提示输入密码
pip install passlib # 使用passlib读取htpasswd文件
- 追加新的用户名和密码
- 使用密码文件来控制上传
默认只有上传操作需要密码验证, 如果希望其他操作也需要密码验证, 可以添加参数
-a .
,指定某个操作需要密码
-P foo/htpasswd.txt -a update,download
,
-P . -a .
表示不设置上传和下载的密码