安裝尚未作為輪子的包裝

許多純 python 軟體包在 Python Package Index 上還沒有作為輪子提供,但仍然安裝得很好。但是,Windows 上的某些軟體包會給出可怕的 vcvarsall.bat 找不到錯誤。

問題是,你要安裝的軟體包中包含 C 或 C++的擴充套件,而不是目前可從 Python 包索引,預建輪 PyPI 中,而在 Windows 上,你不必建造所需的工具鏈這樣的物品。

最簡單的答案是去 Christoph Gohlke 的優秀網站,找到你需要的適當版本的庫。通過適當的包名稱 -cp NN - 必須匹配你的 python 版本,即如果你使用 Windows 32 位 python 甚至在 win64 ,名稱必須包含 -win32- 並且如果使用 64 位 python 它必須包含 -win_amd64 - 然後 python 版本必須匹配,即對於 Python 34,檔名必須包含 -cp 34- 等。這基本上是 pip 在 pypi 網站上為你做的魔術。

或者,你需要為你正在使用的 python 版本獲取適當的 Windows 開發工具包,你嘗試構建介面的包的任何庫的標頭,可能是 python 版本的 python 標頭等。

Python 2.7 使用 Visual Studio 2008,Python 3.3 和 3.4 使用 Visual Studio 2010,Python 3.5+使用 Visual Studio 2015。

然後,你*可能需要所需包連結到的任何庫**的匹配修訂版中*找到標頭檔案,並將其下載到適當的位置。

最後你可以讓 pip 做你的構建 - 當然如果軟體包具有你還沒有的依賴項,你也可能還需要找到它們的標頭檔案。

替代方案: 在 pypi 或 Christop 的網站上也值得一看,你正在尋找的任何稍早版本的軟體包可以是純 python,也可以預先為你的平臺和 python 版本構建,並可能使用它們,如果發現,直到你的包裹可用。同樣,如果你使用的是最新版本的 python,你可能會發現需要一點時間才能讓軟體包維護人員趕上,以便真正需要的專案 一個特定的包,你可能不得不暫時使用稍微老一點的 python。你還可以檢查軟體包源站點以檢視是否有預先構建的分叉版本或純 python,並搜尋提供你需要但可用的功能的備用軟體包 - 一個讓你想到的例子是Pillow積極維護,替代 PIL 目前未在 6 年內更新,不適用於 python 3

後記,我會鼓勵任何有這個問題的人去包的 bug 跟蹤器並新增,或者如果還沒有,那麼就提出一張票,禮貌地請求包維護者為你的具體提供一個 pypi 輪。平臺和 python 的組合,如果這樣做,那麼通常事情會隨著時間的推移變得更好,一些軟體包維護者沒有意識到他們錯過了人們可能正在使用的給定組合。

有關安裝預發行版的注意事項

Pip 遵循語義版本控制的規則,預設情況下優先於預釋出版本釋出。因此,如果一個給定的包已經發布為 V0.98 並且還有一個候選版本 V1.0-rc1pip install 的預設行為將是安裝 V0.98 - 如果你想安裝候選版本,建議你先在虛擬環境中進行測試,可以使用 --pip install --pre package-name--pip install --pre --upgrade package-name 啟用。在許多情況下,預釋出或釋出候選版本可能沒有為所有平臺和版本組合構建的輪子,因此你更有可能遇到上述問題。

安裝開發版本的注意事項

你也可以使用 pip 從 github 和其他位置安裝軟體包的開發版本,因為這樣的程式碼不斷變化,因此不太可能為它構建輪子,因此任何不純的軟體包都需要構建工具,並且它們可能存在在任何時候都要破壞,因此強烈建議使用者僅在虛擬環境中安裝此類軟體包。

這種安裝有三種選擇:

  1. 下載壓縮快照,大多數線上版本控制系統都可以選擇下載程式碼的壓縮快照。這可以手動下載,然後安裝 pip install path / to / downloaded / file 注意,對於大多數壓縮格式,pip 將處理解壓縮到快取區域等。
  2. 讓 pip 為你處理下載和安裝:pip install URL / of / package / repository - 你可能還需要使用 --trusted-host--client-cert 和/或 --proxy 標誌才能正常工作,尤其是在企業環境中。例如:
    > py -3.5-32 -m venv demo-pip
    > demo-pip\Scripts\activate.bat
    > python -m pip install -U pip
    Collecting pip
      Using cached pip-9.0.1-py2.py3-none-any.whl
    Installing collected packages: pip
      Found existing installation: pip 8.1.1
        Uninstalling pip-8.1.1:
          Successfully uninstalled pip-8.1.1
    Successfully installed pip-9.0.1
    > pip install git+https://github.com/sphinx-doc/sphinx/
    Collecting git+https://github.com/sphinx-doc/sphinx/
      Cloning https://github.com/sphinx-doc/sphinx/ to c:\users\steve-~1\appdata\local\temp\pip-04yn9hpp-build
    Collecting six>=1.5 (from Sphinx==1.7.dev20170506)
      Using cached six-1.10.0-py2.py3-none-any.whl
    Collecting Jinja2>=2.3 (from Sphinx==1.7.dev20170506)
      Using cached Jinja2-2.9.6-py2.py3-none-any.whl
    Collecting Pygments>=2.0 (from Sphinx==1.7.dev20170506)
      Using cached Pygments-2.2.0-py2.py3-none-any.whl
    Collecting docutils>=0.11 (from Sphinx==1.7.dev20170506)
      Using cached docutils-0.13.1-py3-none-any.whl
    Collecting snowballstemmer>=1.1 (from Sphinx==1.7.dev20170506)
      Using cached snowballstemmer-1.2.1-py2.py3-none-any.whl
    Collecting babel!=2.0,>=1.3 (from Sphinx==1.7.dev20170506)
      Using cached Babel-2.4.0-py2.py3-none-any.whl
    Collecting alabaster<0.8,>=0.7 (from Sphinx==1.7.dev20170506)
      Using cached alabaster-0.7.10-py2.py3-none-any.whl
    Collecting imagesize (from Sphinx==1.7.dev20170506)
      Using cached imagesize-0.7.1-py2.py3-none-any.whl
    Collecting requests>=2.0.0 (from Sphinx==1.7.dev20170506)
      Using cached requests-2.13.0-py2.py3-none-any.whl
    Collecting typing (from Sphinx==1.7.dev20170506)
      Using cached typing-3.6.1.tar.gz
    Requirement already satisfied: setuptools in f:\toolbuild\temp\demo-pip\lib\site-packages (from Sphinx==1.7.dev20170506)
    Collecting sphinxcontrib-websupport (from Sphinx==1.7.dev20170506)
      Downloading sphinxcontrib_websupport-1.0.0-py2.py3-none-any.whl
    Collecting colorama>=0.3.5 (from Sphinx==1.7.dev20170506)
      Using cached colorama-0.3.9-py2.py3-none-any.whl
    Collecting MarkupSafe>=0.23 (from Jinja2>=2.3->Sphinx==1.7.dev20170506)
      Using cached MarkupSafe-1.0.tar.gz
    Collecting pytz>=0a (from babel!=2.0,>=1.3->Sphinx==1.7.dev20170506)
      Using cached pytz-2017.2-py2.py3-none-any.whl
    Collecting sqlalchemy>=0.9 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
      Downloading SQLAlchemy-1.1.9.tar.gz (5.2MB)
        100% |################################| 5.2MB 220kB/s
    Collecting whoosh>=2.0 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
      Downloading Whoosh-2.7.4-py2.py3-none-any.whl (468kB)
        100% |################################| 471kB 1.1MB/s
    Installing collected packages: six, MarkupSafe, Jinja2, Pygments, docutils, snowballstemmer, pytz, babel, alabaster, imagesize, requests, typing, sqlalchemy, whoosh, sphinxcontrib-websupport, colorama, Sphinx
      Running setup.py install for MarkupSafe ... done
      Running setup.py install for typing ... done
      Running setup.py install for sqlalchemy ... done
      Running setup.py install for Sphinx ... done
    Successfully installed Jinja2-2.9.6 MarkupSafe-1.0 Pygments-2.2.0 Sphinx-1.7.dev20170506 alabaster-0.7.10 babel-2.4.0 colorama-0.3.9 docutils-0.13.1 imagesize-0.7.1 pytz-2017.2 requests-2.13.0 six-1.10.0 snowballstemmer-1.2.1 sphinxcontrib-websupport-1.0.0 sqlalchemy-1.1.9 typing-3.6.1 whoosh-2.7.4

請注意 URL 的 git+字首

  1. 使用 gitmercurial 或其他可接受的工具,克隆庫*優選 DVCS 工具,*並使用 pip install 路徑/到/複製/回購 -這將過程中的任何 requires.text 檔案並執行構建和設定步驟,*可以手動改變目錄到你的克隆儲存庫並執行 pip install -r requires.txt 然後 python setup.py install 以獲得相同的效果。*這種方法的最大優點是,雖然初始克隆操作可能需要比快照下載更長的時間,但是在 git:git pull origin master 的情況下可以更新到最新版本,如果當前版本包含錯誤,你可以使用 pip uninstall package-name 然後使用 git checkout 命令將儲存庫歷史記錄移回早期版本並重新嘗試。