pypiserver 是一個最基本的PyPI服務器實現, 能夠用來上傳和維護python包. 本文介紹 pypiserver 在ubuntu上的基本安裝, 配置和使用.html
pypiserver 能夠在Python 2或者Python 3下運行. 使用pip
就能夠安裝:python
pip install pypiserver
啓動 pypiserver 使用如下命令:apache
pypi-server
在沒有顯示指定任何啓動參數的時候, pypiserver 是使用 ~/packages 來保存Python包, 同時監聽8080端口來提供PyPI服務.ubuntu
此時, 在建立 ~/packages 目錄後, 能夠將Python包上傳到此目錄下. 好比, 有一個Python項目叫 demo , 它的 setup.py 文件內容以下:瀏覽器
from setuptools import setup setup( name='demo', version='0.0.1', packages=['demo'] )
在項目根目錄下執行如下命令來生成Python代碼分發包:服務器
python setup.py sdist
執行完上面這條命令後, 能夠在項目下的 dist 目錄找到分發包 demo-0.0.1.tar.gz. 將分發包上傳到 ~/packages 目錄下, 接下來就能夠訪問 pypiserver 上的Python包了.工具
在安裝和啓動 pypiserver 後, 能夠經過瀏覽器訪問http://localhost:8080能夠訪問 pypiserver 的默認歡迎頁:url
訪問http://localhost:8080/simple/demo則能夠看到剛上傳的_demo-0.0.1.tar.gz_包spa
在本地環境中, 可使用 pip 的 index-url 參數來訪問 pypiserver 上的Python包:code
# pip search -i http://localhost:8080 demo # pip install -i http://localhost:8080 demo
一樣也可使用 easy_install 來訪問 pypiserver :
# easy_install -i http://localhost:8080/simple demo
若是但願經過python setup.py upload
命令將本地項目代碼上傳到PyPI服務器, 能夠經過如下步驟來完成.
默認狀況下, pypiserver 的上傳操做是密碼保護的, 不過能夠經過如下啓動參數來關閉密碼保護:
pypi-server -P . -a .
上述命令中的-P
參數用來指定密碼文件, -a
用來指定須要密碼保護的操做. 當這兩個參數同時指定爲.
時, 表示全部的操做都不須要密碼保護.
此時, 就能夠在Python項目的根目錄下, 執行遠程安裝命令來上傳包. 好比在本地項目中, 執行如下命令:
python setup.py sdist upload -r http://localhost:8080
此時, upload 命令仍然會提示輸入密碼, 此時直接回車確認就能夠了.
當但願使用密碼來控制Python包的上傳操做的時候, 須要使用Apache htpasswd 文件.
pypiserver 須要 passlib 包來讀取 htpasswd 文件. 使用如下命令來安裝 passlib :
pip install passlib
要生成 htpasswd 文件, 須要安裝 apache2-utils 工具包. 在Ubuntu上使用如下命令安裝:
apt-get install -y apache2-utils
接下來就能夠用 htpasswd 命令來生成密碼文件. 假設密碼文件路徑爲 /root/.pypipasswd , 第一次生成密碼文件的命令以下:
htpasswd -c /root/.pypipasswd sam
上述命令中的最後一個參數sam
是用戶名, 執行命令後, 會提示輸入密碼.
當須要在已有的密碼文件中添加新的用戶名和密碼時, 不能再使用-c
參數, 不然會將已有的數據覆蓋. 好比, 要在上一步生成的文件裏添加一個新用戶名 john :
htpasswd /root/.pypipasswd john
接下來就可使用密碼文件來控制上傳操做了. 當啓動 pypiserver 時, 經過-P
參數來指定所要使用的密碼文件. 默認狀況下, 上傳操做會須要密碼驗證, 若是但願其餘操做也須要密碼驗證, 可使用-a
參數. 具體-a
參數的使用能夠查閱_pypiserver_的啓動命令幫助, 這裏再也不展開.
pypi-server -P /root/.pypipasswd
接下來, 在須要上傳Python包的系統中, 須要配置Distutils來指定上傳操做所須要的用戶名和密碼.
建立或者修改 ~/.pypirc 文件, 文件須要如下內容:
[distutils] index-servers = localhost [localhost] repository: http://localhost:8080 username: sam password: 123456
配置中的[localhost]
section就是 pypiserver 的地址和用戶名密碼信息. index-servers
值中的localhost
就指定了名爲localhost
的section. 接下來, 當咱們向名爲 localhost 或者地址爲 http://localhost:8080 的PyPI源上傳Python包時, 用戶名 sam 和密碼 123456 就會被用來驗證操做權限:
python setup.py sdist upload -r localhost
默認狀況下 pypiserver 監聽8080端口, 咱們能夠經過-p
參數來指按期望的端口:
pypi-server -p 9090
默認狀況下 pypiserver 使用_~/packages_ 目錄來讀取和保存Python包. 咱們可使用-P
參數來修改:
pypi-server -P /opt/pypiserver/packages
當請求的Python包, 在本地 pypiserver 上沒有找到時, 它會將請求轉發到外部PyPI源, 默認爲 https://pypi.doubanio.com/simple . 對於國內使用來講, 能夠經過 --fallback-url
參數將轉發目的地址設置爲豆瓣源:
pypi-server --fallback-url https://pypi.doubanio.com/simple