pypi搭建私服

白昼怎懂夜的黑 提交于 2020-03-09 02:03:43

1. 基本概念

pypi可以理解为一个大的仓库,这个仓库中保存着很多python开发相关的包,如numpy,pandas等.当我们需要某个包的时候,我们会执行pip install xxx来安装.这句话背后的逻辑是pip去远程仓库中寻找包,然后下载并解压安装到本地python环境中(通常位于dist-packags下).

一般来说,仓库分为三类,一类是第三方库,在第三方库中最著名的是中央库,全世界的python包都存储在这里.除中央库外,还有阿里云,豆瓣等第三方库,第三方库主要通过代理(proxy)的方式进行连接配置.一类是本地库(host),本地python包的上传和下载都在本地库进行,还有一类是组库(group),组库并不是一个具体的库,而是将多个本地库和代理库组合起来形成一个库,是一个抽象的概念.

当我们希望我们开发的包只在公司内部用时,这个时候就需要搭建pypi私服,搭建好私服后,我们上传到私服的包外人是没法访问的,只有我们自己可以访问.公共的python包不受影响.当我们采用pip命令去安装软件时,执行的顺序是先检查本地是否存在相应的包,如果有就直接安装,否则就去远程取相应的包进行安装.

2. nexus安装

搭建私服最常用的是nexus,nexus下载见链接nexus下载链接.

下载好了以后,解压,然后进入nexus文件夹下的bin目录下,执行命令

nexus.exe /install nexus
nexus.exe /start nexu

这样就完成了nexus的启动.浏览器访问
‘http://localhost:8081/’,可以看到如下页面,证明安装成功.
在这里插入图片描述

3. pypi私服配置

用管理员账户密码登录nexus3,然后点击左侧栏仓库图标,接着点击创建仓库.
在这里插入图片描述
接着我们可以看到pypi的三个选项,在本例中,我们搭建一个host,一个proxy和一个group库.
在这里插入图片描述
建立host库很简单,直接点击创建仓库即可.
在这里插入图片描述
搭建代理仓库需要填写代理仓库地址,常用的代理仓库地址如下表所示.,直接在页面中填写链接地址点击创建仓库即可.

仓库名称 代理地址
官方源 http://pypi.python.org/pypi/
阿里云 http://mirrors.aliyun.com/pypi/

在这里插入图片描述

接着创建group仓库,直接点击创建,然后加入刚刚的两个仓库就可以.

4. 测试

我们写一个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 <url> dist/*

执行完毕后,我们可以在仓库中看到我们上传的包.

测试pypi包的下载,执行命令,其中url换成group库的url,host换成url中对应的host.可以看到顺利安装了对应的包.

pip install freewheel -i <url>/simple --trusted-host <host>

在代码中测试刚刚下载的包,测试代码如下

from freewheel.demo import Demo

if __name__ == '__main__':
    Demo.sayHello()

屏幕中会打印出hello.

4. 参考文献

pypi私服测试

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!