發表文章

pip install module from local file

圖片
今天我想更新我們原先的nester module,讓我在shell裡可以使用它。我先修改setup.py裡的version。然後我是用 python.exe setup.py sdist 建立需要的發佈檔案。接著要進行安裝,但是不曉得是不是更新pip的緣故,我已經無法使用 python.exe setup.py install 。執行這行指令的話會出現錯誤: 叫我改用pip來安裝。於是我用上一篇blog寫得,使用 py -m pip install nester ,結果發現 它一直安裝1.0.0版,但是我最新版已經在setup.py裡宣告是1.3.0版,可見這並不是我要安裝的版本。 我又再次到PyPI的說明網頁[1]去,這次仔細地閱讀,發現使用 py -m pip install 是直接從PyPI下載來安裝,但是我需要的是能夠直接用我電腦裡的檔案安裝。依照[1]的說明,其實 pip 是可以直接指定安裝檔案的。用法很簡單,只要直接指定該檔案的路徑就可以了。以我這裡的例子就是 py -m pip install nester-1.3.0.tar.gz 。這裡是因為我已經移到該安裝檔案的資料夾裡,所以我很簡單的直接在 install 後面接上檔案名稱。 可以看出來已經安裝成功。原本以為這樣就可以,結果發現shell還是執行舊的版本。依照以往的經驗,這代表系統中存在著舊版本並沒有被刪除,而且還是被優先使用。於是就要知道這個檔案藏在哪裡。 關於這個問題,可以在shell鍵入 import sys; sys.path 就可以列出所有python參照的系統路徑。於是我就到每個路徑裡去找出舊版的nester.py並刪除,就能夠成功地參照到新版檔案了。 Reference [1] https://packaging.python.org/en/latest/tutorials/installing-packages/#use-pip-for-installing

Upload Python Project to PyPI

圖片
發生了什麼事 事情是這樣的,我打算照著《深入淺出 Python》這本書學習Python。到第二章時要開始上傳module到PyPI (Python Package Index, PyPI)。這邊開始發現有一系列需要更新的地方,表列如下: PyPI的網址已經修改為 https://pypi.org 使用命令提示字元(cmd.exe),最好使用管理員身分執行。在建立要上傳檔案時會新增檔案,因此需要管理員身分。 在windows環境下,直接使用 py 就可以取代 python.exe。其他環境我沒試過。 PyPI註冊帳號的頁面已經跟書中不同,現在沒有欄位給你提供PGP金鑰。 上傳程式到PyPI會出現error。因為書中是使用 setup.py register 與 setup.py sdist upload。書中說要再註冊一次,我認為用字不夠精準。應該說是登入帳號才對。 因為照著書中的方式會無法上傳module到PyPI,因此我就開始尋找解答。依照目前查詢的結果,PyPI官方建議使用twine這個package。但是我的系統中沒有,所以就必須要學習如何安裝package。 無法上傳的錯誤情況 首先我先到nester資料夾中,然後給出command: py setup.py register ,接著利用現有帳戶登入後,會出現: Server response(410): Project Pre-registration is no longer required or supported, upload your files instead. 以及下列的錯誤訊息: 於是我緊接著到 [1] 去看,說是帳號密碼登入錯誤,不過我很明確我給的是對的。於是我就繼續用google搜尋,找到[2]。在[2]裡請提問者看[3]的說明。[3]是PyPI上傳檔案的說明,可以發現PyPI官方並不推薦使用 setup.py register 與 setup.py upload 指令。 解決方案 在[3]中,我們可以看到他建議使用twine作為上傳工具。 下個問題是這個twine是什麼呢?有連結[4]就直接按下去吧! [4]說明了twine是官...