使用pypi-server搭建简单的PyPI源
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包了.
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
4. 相关资源
使用pypi-server搭建简单的PyPI源的更多相关文章
- pip高级使用技巧以及搭建自己的pypi服务器
========================= pip 访问非官方pypi源, 以及代理的设置=========================在Windows下安装某些Python的C ext ...
- 搭建自己的pypi私有源服务器
最简单的方式: pypiserver – minimal pypi server, easy to install & use 1.安装pypiserver:pip install pypis ...
- pypi服务器搭建
pypi服务器搭建 [root@localhost ~]# hostnamectl set-hostname --static pypi-server [root@pypi-server ~]# yu ...
- 拿nodejs快速搭建简单Oauth认证和restful API server攻略
拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...
- Linux yum的配置 , python环境管理, nginx搭建简单学习
Linux yum的配置 , python环境管理, nginx搭建简单学习 一丶配置yum的数据仓库 ### yum 工具, 方便,自行解决软件之间的依赖关系. # 配置yum源仓库 (可以使用,清 ...
- Ubuntu server 搭建Git server
Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客户端用户的本地都是一个版本管理控制器. Ubuntu server 版本为12.04 搭建步骤如下: ...
- Ubuntu server 搭建Git server【转】
转自:http://www.cnblogs.com/candle806/p/4064610.html Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客 ...
- Koa2+MySQL+VUE+ElementIUI搭建简单的后台管理小系统
如题,前端入坑许久,还是写个小东西出来吧 想要搭建自己的一个后台管理,实现简单的增删改查,看起来很简单 其实是真的简单,没有想的那么难,我也就写了一个月吧, 当然是假的,其实也就每天一两个小时,花了大 ...
- Managed DirectX中的DirectShow应用(简单Demo及源码)
阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...
随机推荐
- PCA与特征选取
一.什么是PCA PCA,即PrincipalComponents Analysis,也就是主成份分析: 通俗的讲,就是寻找一系列的投影方向,高维数据按照这些方向投影后其方差最大化(方差最大的即是第一 ...
- Css3盒子模型-css学习之旅(5)
主要内容: 盒子模型内边距,外边距,边框,外边距合并 主要包括:margin(外边距)padding(内边距) border(边框)centent(内容) 内边距:padding,paddinglef ...
- 开源视频监控系统:iSpy
iSpy是一个开源的视频监控软件,目前已经支持中文.自己用了一下,感觉还是很好用的.翻译了一下它的介绍. iSpy将PC变成一个完整的安全和监控系统 iSpy使用您的摄像头和麦克风来检测和记录声音或运 ...
- mysql进阶(八)怎么对varchar类型排序问题
MySQL中怎么对varchar类型排序问题 asc 升级 desc降序 在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同 ...
- 【Android 应用开发】Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...
- LeetCode之“动态规划”:Valid Parentheses && Longest Valid Parentheses
1. Valid Parentheses 题目链接 题目要求: Given a string containing just the characters '(', ')', '{', '}', '[ ...
- Erlang cowboy websocket 服务器
Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_ ...
- ExtAspNet页面跳转的方法
一:如果在Page_Load中则可以用Response.Redirect("ABC.aspx"); 二:在其它事件中可以用以下方法: protected void Button1_ ...
- Oracle EBS ERP中月结年结的流程总结
月结与年结处理,是企业财务比较特殊而重要的业务操作.在实施与推广OracleERP系统过程中,如何结合现行的会计制度与惯例,充分利用软件功能,做好相应的关账.开账工作,是困扰许多企业财务人员乃至实施顾 ...
- 【50】java 匿名内部类剖析
匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明 ...