使用pypi-server搭建簡單的PyPI源

来源:https://www.cnblogs.com/mithrilon/archive/2018/05/12/8954677.html
-Advertisement-
Play Games

_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

在本地環境中, 可以使用 pipindex-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

4. 相關資源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前面的話 iphone4發佈是幾年前的事情,而如今早已是移動互聯網的時代。人們不再正襟危坐在電腦前,而更願意把時間耗費在手機上,隨時隨地地享受互聯網。在移動端可以使用最新最炫的前端技術,而不用再考慮老版本IE的相容性。當前,很多公司的前端開發都是移動優先,因此,移動端開發已經成為前端開發工程師的標配 ...
  • 例子:https://github.com/wayaha/rotateChart 在ES5中,構造函數的使用可以說是很能體現面向對象的編程思想,有學過c的同學,可以很明顯體會到面向過程和麵向對象的區別,不多瞎扯,這次通過一個輪播圖的插件來理解一下構造函數; 1、關於對象的創建方式 常見的創建對象方式 ...
  • 負載均衡 負載均衡是部署有相同應用的伺服器組成的一個集群,每次用戶請求都可以發送到集群中任意一臺伺服器上去處理,任何一臺伺服器處理結果都是相同的。 負載均衡伺服器是一個HTTP請求分發裝置,能感知或配置集群的伺服器數量,及時發現集群中上線、下線的伺服器,並將請求分發到上線的伺服器。 實現負載均衡有5 ...
  • 談談三種工廠模式 遠在上個世紀,電腦技術的大牛們就總結出了23種設計及模式,這些設計模式解決了我們程式在模擬現實世界事物以及邏輯時,會出現的一些問題,以及對一些常見的系統設計中常見的問題提出一些解決方案。 工廠模式是一種常見的實例化對象的一種方式,告別了new的方法,更符合現實世界的邏輯,因為現實 ...
  • 前言在微服務架構中,我們將系統拆分成了一個個的服務單元,各單元應用間通過服務註冊與發現的方式互相依賴。 由於每個單元都在不同的進程中運行,依賴通過遠程調用的方式執行,這樣就有可能因為網路原因或是依賴服務自身問題出現調用故障或延遲, 而這些問題會直接導致調用方的對外服務也出現延遲,若此時調用方的請求不 ...
  • 1. 快速啟動終端:ctr+alt+t2. 終端字體放大: ctr+shift+'+'3. 終端字體縮小: ctr+'-'4. ls: 查看當前目錄下文件信息 4.1 ls BD ABC 同時查看兩個目錄5. pwd: 查看目錄的路徑6. touch: 創建文件 6.1 touch 1.txt 2. ...
  • 前言: 這周有個項目需要生成二維碼,研究了一下使用Google的zxing生成二維碼,發現效果還可以,在這裡記錄下。如果需要更加定製化的二維碼,也可接通第三方API服務生成二維碼。 二維碼的生成 : ...
  • 下載安裝CMake 下載Opencv源碼 打開CMake,設置源碼路徑和生成路徑,點擊Configure選擇要生成的版本。 勾選BUILD_opencv_world的話,表示只生成一個庫文件(集合起來)。點擊Generate開始生成工程項目。 點擊Open Project,打開工程。生成INSTAL ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...