阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用pypi-server搭建简单的PyPI源

200次阅读
没有评论

共计 2684 个字符,预计需要花费 7 分钟才能阅读完成。

pypiserver 是一个最基本的 PyPI 服务器实现, 可以用来上传和维护 Python 包. 本文介绍 pypiserver 在 Ubuntu 上的基本安装, 配置和使用.

1. 基本安装和使用

1.1 安装和启动

pypiserver 可以在 Python 2 或者 Python 3 下运行. 使用 pip 就可以安装:
pip install pypiserver

启动 pypiserver 使用以下命令:
pypi-server

在没有显示指定任何启动参数的时候, pypiserver 是使用 ~/packages 来保存 Python 包, 同时监听 8080 端口来提供 PyPI 服务.

1.2 上传 Python 包

此时, 在创建 ~/packages 目录后, 可以将 Python 包上传到此目录下. 比如, 有一个 Python 项目叫 demo , 它的 setup.py 文件内容如下:
from setuptools import setup

setup(
    name=’demo’,
    version=’0.0.1′,
    packages=[‘demo’]
)

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

执行完上面这条命令后, 可以在项目下的 dist 目录找到分发包 demo-0.0.1.tar.gz. 将分发包上传到 ~/packages 目录下, 接下来就可以访问 pypiserver 上的 Python 包了.

使用 pypi-server 搭建简单的 PyPI 源

1.3 安装 pypiserver 上的 Python 包

在安装和启动 pypiserver 后, 可以通过浏览器访问 http://localhost:8080 可以访问 pypiserver 的默认欢迎页:

访问 http://localhost:8080/simple/demo 则可以看到刚上传的_demo-0.0.1.tar.gz_包

1.3.1 pip

在本地环境中, 可以使用 pip 的 index-url 参数来访问 pypiserver 上的 Python 包:
# pip search -i http://localhost:8080 demo
# pip install -i http://localhost:8080 demo

1.3.2 easy_install

同样也可以使用 easy_install 来访问 pypiserver :
# easy_install -i http://localhost:8080/simple demo

2. 远程上传项目包

如果希望通过 python setup.py upload 命令将本地项目代码上传到 PyPI 服务器, 可以通过以下步骤来完成.

2.1 无密码上传项目包

默认情况下, pypiserver 的上传操作是密码保护的, 不过可以通过以下启动参数来关闭密码保护:
pypi-server -P . -a .

上述命令中的 - P 参数用来指定密码文件, - a 用来指定需要密码保护的操作. 当这两个参数同时指定为. 时, 表示所有的操作都不需要密码保护.

此时, 就可以在 Python 项目的根目录下, 执行远程安装命令来上传包. 比如在本地项目中, 执行以下命令:
python setup.py sdist upload -r http://localhost:8080

此时, upload 命令仍然会提示输入密码, 此时直接回车确认就可以了.

2.2 使用密码保护 PyPI 源

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

pypiserver 需要 passlib 包来读取 htpasswd 文件. 使用以下命令来安装 passlib :
pip install passlib

要生成 htpasswd 文件, 需要安装 apache2-utils 工具包. 在 Ubuntu 上使用以下命令安装:
apt-get install -y apache2-utils

接下来就可以用 htpasswd 命令来生成密码文件. 假设密码文件路径为 /root/.pypipasswd , 第一次生成密码文件的命令如下:
htpasswd -c /root/.pypipasswd sam

上述命令中的最后一个参数 sam 是用户名, 执行命令后, 会提示输入密码.

当需要在已有的密码文件中添加新的用户名和密码时, 不能再使用 - c 参数, 否则会将已有的数据覆盖. 比如, 要在上一步生成的文件里添加一个新用户名 john :
htpasswd /root/.pypipasswd john

接下来就可以使用密码文件来控制上传操作了. 当启动 pypiserver 时, 通过 - P 参数来指定所要使用的密码文件. 默认情况下, 上传操作会需要密码验证, 如果希望其他操作也需要密码验证, 可以使用 - a 参数. 具体 - a 参数的使用可以查阅_pypiserver_的启动命令帮助, 这里不再展开.
pypi-server -P /root/.pypipasswd

接下来, 在需要上传 Python 包的系统中, 需要配置 Distutils 来指定上传操作所需要的用户名和密码.

创建或者修改 ~/.pypirc 文件, 文件需要以下内容:
[distutils]
index-servers = localhost

[localhost]
repository: http://localhost:8080
username: sam
password: 123456

配置中的 [localhost] section 就是 pypiserver 的地址和用户名密码信息. index-servers 值中的 localhost 就指定了名为 localhost 的 section. 接下来, 当我们向名为 localhost 或者地址为 http://localhost:8080 的 PyPI 源上传 Python 包时, 用户名 sam 和密码 123456 就会被用来验证操作权限:
python setup.py sdist upload -r localhost

3. 其他配置

3.1 指定监听端口

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

3.2 指定包目录

默认情况下 pypiserver 使用_~/packages_ 目录来读取和保存 Python 包. 我们可以使用 - P 参数来修改:
pypi-server -P /opt/pypiserver/packages

3.3 请求转发

当请求的 Python 包, 在本地 pypiserver 上没有找到时, 它会将请求转发到外部 PyPI 源, 默认为 https://pypi.doubanio.com/simple . 对于国内使用来说, 可以通过 –fallback-url 参数将转发目的地址设置为豆瓣源:
pypi-server –fallback-url https://pypi.doubanio.com/simple

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计2684字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中