簡短回答:使用pip install --no-binary :all:
安裝您的軟件包。
我掙扎了一會兒,最終發現在二進制輪子和源代碼分發之間如何處理data_files
有一些奇怪/不一致。具體而言,輪子有一個缺陷,使所有路徑相對於安裝位置爲data_files
(有關跟蹤此問題的問題,請參閱https://bitbucket.org/pypa/wheel/issues/92)。
「這很好」,你可能會說,「但我沒有使用輪子!」。沒那麼快!事實證明,最近版本的pip(我正在使用9.0.1)將嘗試從源代碼分發中編譯一個輪子。例如,如果你有一個包my_package
你可以看到這個做這樣的事情
$ python setup.py sdist # create source tarball as dist/my_package.tar.gz
[...]
$ pip install dist/my_package.tar.gz # install the generated source
[...]
Building wheels for collected packages: my_package
Running setup.py bdist_wheel for my_package ... done
pip
嘗試是有益的,建立一個車輪從安裝和緩存供以後使用。這意味着即使理論上你自己並沒有使用bdist_wheel
,也會遇到上述錯誤。您可以通過直接從軟件包源文件夾運行python setup.py install
來解決此問題。這可以避免構建和緩存構建輪子pip
將嘗試執行,但是當您想要的包已經在PyPI某處時很不方便。幸運的是pip
提供了顯式禁用二進制文件的選項。
$ pip install --no-binary :all: my_package
[...]
Skipping bdist_wheel for my_package, due to binaries being disabled for it.
Installing collected packages: my_package
Running setup.py install for my_package ... done
Successfully installed my_package-0.1.0
使用--no-binary
選項可以防止車輪建設,讓我們再次引用我們data_files
路徑絕對路徑。對於要安裝大量包裝並希望選擇性禁用車輪的情況,您可以用逗號分隔的包列表替換:all:
。