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.