pypi可以理解为一个大的仓库,这个仓库中保存着很多python开发相关的包,如numpy,pandas等.当我们需要某个包的时候,我们会执行pip install xxx来安装.这句话背后的逻辑是pip去远程仓库中寻找包,然后下载并解压安装到本地python环境中(通常位于dist-packags下).
一般来说,仓库分为三类,一类是第三方库,在第三方库中最著名的是中央库,全世界的python包都存储在这里.除中央库外,还有阿里云,豆瓣等第三方库,第三方库主要通过代理(proxy)的方式进行连接配置.一类是本地库(host),本地python包的上传和下载都在本地库进行,还有一类是组库(group),组库并不是一个具体的库,而是将多个本地库和代理库组合起来形成一个库,是一个抽象的概念.
当我们希望我们开发的包只在公司内部用时,这个时候就需要搭建pypi私服,搭建好私服后,我们上传到私服的包外人是没法访问的,只有我们自己可以访问.公共的python包不受影响.当我们采用pip命令去安装软件时,执行的顺序是先检查本地是否存在相应的包,如果有就直接安装,否则就去远程取相应的包进行安装.
搭建私服最常用的是nexus,nexus下载见链接nexus下载链接.
下载好了以后,解压,然后进入nexus文件夹下的bin目录下,执行命令
nexus.exe /install nexus
nexus.exe /start nexu
这样就完成了nexus的启动.浏览器访问
‘http://localhost:8081/’,可以看到如下页面,证明安装成功.
用管理员账户密码登录nexus3,然后点击左侧栏仓库图标,接着点击创建仓库.
接着我们可以看到pypi的三个选项,在本例中,我们搭建一个host,一个proxy和一个group库.
建立host库很简单,直接点击创建仓库即可.
搭建代理仓库需要填写代理仓库地址,常用的代理仓库地址如下表所示.,直接在页面中填写链接地址点击创建仓库即可.
仓库名称 | 代理地址 |
---|---|
官方源 | http://pypi.python.org/pypi/ |
阿里云 | http://mirrors.aliyun.com/pypi/ |
接着创建group仓库,直接点击创建,然后加入刚刚的两个仓库就可以.
我们写一个freewheel来对我们刚刚新建的私服进行测试,执行如下命令.
mkdir freewheel
touch freewheel/__init__.py
vim freewheel/demo.py
然后编写freewheel代码,代码如下
class Demo:
@staticmethod
def sayHello():
print('hello')
接着编写setup.py
from setuptools import setup
setup(
name='freewhell',
version='1.0',
author="techlog",
license="MIT",
packages=[
'freewheel'
],
install_requires=[
],
classifiers=[
"Topic :: Utilities",
"Topic :: Internet",
"Topic :: Software Development :: Libraries :: Python Modules"
],
)
对文件进行打包,执行
python setup.py sdist bdist_wheel
此时生成的目录结构如下
其中,dist下面的文件是我们需要上传到服务器的,如图所示
接着使用twine将dist下面的包上传到私服,执行如下命令,其中,url换成我们刚搭建好的host库的url,直接在nexus界面上点击复制链接即可.此时需要输入管理员用户名和密码.
pip install twine
twine upload --repository-url dist/*
执行完毕后,我们可以在仓库中看到我们上传的包.
测试pypi包的下载,执行命令,其中url换成group库的url,host换成url中对应的host.可以看到顺利安装了对应的包.
pip install freewheel -i /simple --trusted-host
在代码中测试刚刚下载的包,测试代码如下
from freewheel.demo import Demo
if __name__ == '__main__':
Demo.sayHello()
屏幕中会打印出hello.
pypi私服测试