我使用 pip 和 setuptools 来安装软件包。
我希望 pip 将一些资源文件复制到,例如/etc/my_package
.
My setup.py
看起来像这样:
setup(
...
data_files=[('/etc/my_package', ['config.yml'])]
)
跑步时pip install
,文件最终位于
~/.local/lib/python3.5/site-packages/etc/my_package/config.yml
代替/etc/my_package
.
我究竟做错了什么?
(点子版本9.0.1)
简短回答:使用pip install --no-binary :all:
安装你的包。
我为此苦苦挣扎了一段时间,最终发现这样做有一些奇怪/不一致的地方data_files
在二进制轮和源发行版之间处理。具体来说,轮子存在一个错误,使得all路径在data_files
相对于安装位置(参见https://github.com/pypa/wheel/issues/92 https://github.com/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:
用逗号分隔的包列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)