pypi搭建私服

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私服測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章