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

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

554次阅读
没有评论

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982261
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...