1.先搭建pypi源服务器
pip install pypiserver
pypi-server -p 8080 D:\packages\ #无密码验证启动
pypi-server -p 8080 -P F:\commons-lib\htpasswd.txt D:\packages\ #有密码验证启动
这里的htpasswd.txt参考官方文档https://pypi.org/project/pypiserver/,
htpasswd是用来添加认证
使用htpasswd创建用户和密码,首先安装 passlib:
pip install passlib
创建htpasswd文件并创建一个用户(admin),并按照提示输入密码:
htpasswd -s htpasswd.txt admin
如果是windows的话用网页在线生成然后自己写入到文本里,设置的这个密码在之后upload模块的时候要用到。
测试访问:http://localhost:8080/simple/可看到本地有什么库。
可以把一些已有requirements.txt的库下载到私有库,然后再另外安装到私有库,不过不推荐这种方式,会有一些包在官方源没有,例如conda的库。
pip download -d D:\packages\ -r D:\requirements.txt --index-url https://mirrors.aliyun.com/pypi/simple
pip install --index-url http://localhost:8080/simple/ --extra-index-url https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
推荐在pip源里设置2个源,1个官方源,1个私有库的源。然后我们只需把自己的库upload到私有库就行。pip install 的时候会根据配置的优先级搜索这些源的包。
设置pip的源,windows在C:\Users\username\pip\pip.ini,没有的话自己创建,这里设置了2个源,当一个源没的时候就会在第二个源搜
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url= http://localhost:8080/simple/
[install]
trusted-host=
mirrors.aliyun.com
localhost
2.打包
最基础要有个setup.py
import setuptools
setuptools.setup(name='irequest',
version='1.0',
description='irequest description',
author='Bird',
author_email='a@a.com',
url='http://a.com',
packages=setuptools.find_packages()
)
setuptools和wheel和twine并升级到最新版本
python -m pip install --user --upgrade setuptools wheel twine
python setup.py check #检查setup.py是否正确,返回running check就是正确
python setup.py sdist #打包出.tar.gz
或
python setup.py sdist bdist_wheel #打包出.tar.gz和.whl
在dist目录中生成两个文件.tar.gz和.whl
该tar.gz文件是源存档,而该.whl文件是构建的发行版。较新的pip版本优先安装构建的发行版,但如果需要,将回退到源代码存档。您应该始终上传源存档并为项目兼容的平台提供构建的存档。
分别上传.tar.gz和.whl,可以上传其中一个
python setup.py sdist upload -r test-pypi
python setup.py bdist_wheel upload -r test-pypi
或者用twine上传
python -m twine upload --repository test-pypi dist/*
3.上传前要配置好.pypirc
register和upload命令会去~/.pypirc配置文件中,查找PyPI的配置。如果是搭建了一个私有PyPI源,那么就需要在~/.pypirc中配置下私有仓库的地址,账号和密码信息
一般在~/.pypirc(Linux下是/home/username/.pypirc,windows是C:\Users\username\.pypirc)上写入,没有的话自己创建,注意不要有中文,index-servers的值换行后前面有tab空格,必须要有username和passowrd
[distutils]
index-servers =
pypi
pypitest
test-pypi
[pypi]
repository: https://pypi.python.org/pypi
username:{{your_username}}
password:{{your_password}}
[pypitest]
repository: https://testpypi.python.org/pypi
username:{{your_username}}
password:{{your_password}}
[test-pypi]
repository:http://localhost:8080
username:admin
password:admin
参考:
https://blog.csdn.net/wdxin1322/article/details/56685094/
https://www.colabug.com/2020/0316/7128915/
http://cloga.info/python/2019/07/07/build_your_private_pip_source
https://blog.zengrong.net/post/python_packaging/
使用docker部署devpi框架的pypi服务: