gpt4 book ai didi

python - 如何将 data_files 安装到绝对路径?

转载 作者:行者123 更新时间:2023-11-28 21:08:05 25 4
gpt4 key购买 nike

我使用 pip 和 setuptools 来安装一个包。我希望 pip 将一些资源文件复制到 /etc/my_package

我的 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

我做错了什么?

(pip 版本 9.0.1)

最佳答案

简短回答:使用 pip install --no-binary :all: 安装您的包。

我为此苦苦挣扎了一段时间,最终发现二进制轮和源代码分发之间的 data_files 处理方式存在一些奇怪/不一致的地方。具体来说,轮子存在一个错误,它使 data_files 中的所有路径都相对于安装位置(请参阅 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: 替换为逗号分隔的软件包列表。

关于python - 如何将 data_files 安装到绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40588634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com