_pypiserver_ 是一個最基本的PyPI伺服器實現, 可以用來上傳和維護python包. 本文介紹 _pypiserver_ 在ubuntu上的基本安裝, 配置和使用. 1. 基本安裝和使用 1.1 安裝和啟動 _pypiserver_ 可以在Python 2或者Python 3下運行. 使 ...
pypiserver 是一個最基本的PyPI伺服器實現, 可以用來上傳和維護python包. 本文介紹 pypiserver 在ubuntu上的基本安裝, 配置和使用.
1. 基本安裝和使用
1.1 安裝和啟動
pypiserver 可以在Python 2或者Python 3下運行. 使用pip
就可以安裝:
pip install pypiserver
啟動 pypiserver 使用以下命令:
pypi-server
在沒有顯示指定任何啟動參數的時候, pypiserver 是使用 ~/packages 來保存Python包, 同時監聽8080埠來提供PyPI服務.
1.2 上傳Python包
此時, 在創建 ~/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包了.
1.3 安裝 pypiserver 上的Python包
在安裝和啟動 pypiserver 後, 可以通過瀏覽器訪問http://localhost:8080可以訪問 pypiserver 的預設歡迎頁:
訪問http://localhost:8080/simple/demo則可以看到剛上傳的_demo-0.0.1.tar.gz_包
1.3.1 pip
在本地環境中, 可以使用 pip 的 index-url 參數來訪問 pypiserver 上的Python包:
# pip search -i http://localhost:8080 demo
# pip install -i http://localhost:8080 demo
1.3.2 easy_install
同樣也可以使用 easy_install 來訪問 pypiserver :
# easy_install -i http://localhost:8080/simple demo
2. 遠程上傳項目包
如果希望通過python setup.py upload
命令將本地項目代碼上傳到PyPI伺服器, 可以通過以下步驟來完成.
2.1 無密碼上傳項目包
預設情況下, pypiserver 的上傳操作是密碼保護的, 不過可以通過以下啟動參數來關閉密碼保護:
pypi-server -P . -a .
上述命令中的-P
參數用來指定密碼文件, -a
用來指定需要密碼保護的操作. 當這兩個參數同時指定為.
時, 表示所有的操作都不需要密碼保護.
此時, 就可以在Python項目的根目錄下, 執行遠程安裝命令來上傳包. 比如在本地項目中, 執行以下命令:
python setup.py sdist upload -r http://localhost:8080
此時, upload 命令仍然會提示輸入密碼, 此時直接回車確認就可以了.
2.2 使用密碼保護PyPI源
當希望使用密碼來控制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
3. 其他配置
3.1 指定監聽埠
預設情況下 pypiserver 監聽8080埠, 我們可以通過-p
參數來指定期望的埠:
pypi-server -p 9090
3.2 指定包目錄
預設情況下 pypiserver 使用_~/packages_ 目錄來讀取和保存Python包. 我們可以使用-P
參數來修改:
pypi-server -P /opt/pypiserver/packages
3.3 請求轉發
當請求的Python包, 在本地 pypiserver 上沒有找到時, 它會將請求轉發到外部PyPI源, 預設為 https://pypi.doubanio.com/simple . 對於國內使用來說, 可以通過 --fallback-url
參數將轉發目的地址設置為豆瓣源:
pypi-server --fallback-url https://pypi.doubanio.com/simple