公司不同项目中用到了相同的模块,比如相同的取历史数据,以及一些相同的工具类。在不同项目中这些代码复制,黏贴,还会造成同一个bug需要修改多次和代码不一致导致的一系列问题,增加了维护成本。通常我们使用pip安装python包,都会默认从https://pypi.python.org/pypi上安装。但是由于是公司内部的项目,不方便放到外网上,所以我们要搭建自己的内网pypi源服务器,也可以用pip install的方式安装公共模块。
python官方关于pypi私有源实现的说明:http://wiki.python.org/moin/PyPiImplementations
首先选用快速上手的pypiserver进行尝试
1.首先进行安装
pip install pypiserver
mkdir ~/packages
2.复制一些包到packages目录,然后启动pypiserver 服务
首先,我在工作目录下新建一个文件夹mayTest里面有一个test.py.我在mayTest同级目录增加一个setup.py,内容如下
from setuptools import setup
setup(
name='maytest',
version='0.0.1',
packages=['maytest']
)
在setup.py所在的目录执行以下代码来生成python代码分发包,执行完会出现一个dist目录,找到分发包maytest-0.0.1.tar.gz,将分发包上传到~/packages目录下。
3.启动pypi-server,端口可以随意指定
pypi-server -p 8080 ~/packages &
http://localhost:8080/simple/网页上的效果
4.从客户端电脑(测试时只是开了一个新的终端...)
pip install --extra-index-url http://localhost:8080/simple/ ...
pip install --extra-index-url http://localhost:8080
pip search --index http://localhost:8080 ...
这样就安装成功了。
5.远程上传项目包
默认情况下,pypiserver的上传操作是密码保护的,需要安装一些包,pypiserver 需要passlib包来读取htpasswd文件。如下命令
pip install passlib
第一次生成密码的命令
htpasswd -c /root/.pypipasswd may
may 为用户名,之后会提示输入密码和再次输入密码
已经有用户名后再次加入用户名密码, 去掉-c命令即可。
接下来需要用Distutils来指定上传操作所需要的用户名和密码。创建活修改~/.pypirc文件,创建命令touch .pypirc.文件内容如下
然后kill掉之前pypi-server,通过-P参数指定所要使用的密码文件来启动pypi-server
接下来向名为localhost的pypi源上传python包时,用了may密码为linlin来验证操作权限
最后做验证,确认maytest-0.0.2.tar.gz上传到pypi源上