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()
pip install pypiserver
mkdir ~/packages
cd ~/packages
pip download faker # 手动下载包
pypi-server # pypiserver默认包存放路径是 ~/packages , 默认端口号是8080
pip search -i http://localhost:8080 Faker
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,否则将安装失败
默认情况下 pypiserver 监听8080端口, 我们可以通过-p参数来指定期望的端口:
pypi-server -p 9090 # 修改默认8080端口
pypi-server -P ./packages # 修改默认路径
pypi-server --fallback-url https://pypi.doubanio.com/simple # 添加备用源,本地源找不到去备用源下载
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路径下
当希望使用密码来控制Python包的上传操作的时候, 需要使用Apache htpasswd 文件。
apt-get install -y apache2-utils
htpasswd -c ~/.pypipasswd zs # 使用apache2-utils工具包生成htpasswd文件,zs是用户名,回车提示输入密码
pip install passlib # 使用passlib读取htpasswd文件
htpasswd /root/.pypipasswd john # 注意不能加-c,否则会覆盖已有的
pypi-server -P /root/.pypipasswd # -P参数来指定所要使用的密码文件
默认只有上传操作需要密码验证, 如果希望其他操作也需要密码验证, 可以添加参数 -a .
,指定某个操作需要密码-P foo/htpasswd.txt -a update,download
,-P . -a .
表示不设置上传和下载的密码