gpt4 book ai didi

python - 安装时复制配置文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:50 25 4
gpt4 key购买 nike

我正在尝试打包我的 Python 项目,它带有一个配置 pip 文件,我想在安装时将其复制到用户的主目录中。打包快速指南说,这可以使用 setuptools.setupdata_files 参数来完成。所以这就是我所拥有的:

data_files = [(os.path.expanduser("~"), [".my_config"])]

如果我使用 python setup.py install,这似乎工作正常,但是当我将我的包上传到 PyPI 并运行 pip install 时, pip 文件没有被复制。

FWIW,我已将 pip 文件放在 MANIFEST.in 中,还尝试将 package_data 参数包含到 setup 中。这些步骤似乎都没有什么不同。如果我 pip install 并浏览 site-packages 目录,这里只有源文件。

我怎样才能实现我正在寻找的东西?

最佳答案

这是我曾经亲身经历过的一个问题。其根源在于当你构建一个 wheel 文件时,data_files 中指定的所有绝对路径将相对化到目标 site-packages 目录,参见 this issue on github .这会影响 pip install 执行的安装,因为它将从任何源包(.tar.gz.tar.bz2.zip) 并安装结果轮:

$ pip install spam-0.1.tar.gz 
Processing ./spam-0.1.tar.gz
<b>Building wheels for collected packages: spam
Running setup.py bdist_wheel for spam ... done</b>
Stored in directory: /Users/hoefling/Library/Caches/pip/wheels/d0/95/be/bc79f1d589d90d67139481a3e706bcc54578fdbf891aef75c0
Successfully built spam
Installing collected packages: spam
Successfully installed spam-0.1

检查安装的文件产量:

$ pip show -f spam
Name: spam
Version: 0.1
...
Location: /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages
Requires:
Files:
<b>Users/hoefling/.my_config</b>
spam-0.1.dist-info/DESCRIPTION.rst
spam-0.1.dist-info/INSTALLER
spam-0.1.dist-info/METADATA
spam-0.1.dist-info/RECORD
spam-0.1.dist-info/WHEEL
spam-0.1.dist-info/metadata.json
spam-0.1.dist-info/top_level.txt

请注意,绝对路径是相对于 Location 目录的。在示例中,.my_config 将放置在 /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/Users/hoefling/.my_config 下.

它变得更好,因为这些构建的轮子缓存在你的磁盘上,所以下次你重新安装包并且构建的轮子仍然存在于 pip 的缓存中时,它将用于安装你甚至不会在终端日志中看到任何关于构建轮子的提及。

没有真正的解决方案可以避免这种情况。我发现最合适的解决方法是在安装时禁止“二进制”包,以在安装时强制执行包的 setup.py:

$ pip install spam-0.1.tar.gz --no-binary=spam
Processing ./spam-0.1.tar.gz
Skipping bdist_wheel for spam, due to binaries being disabled for it.
Installing collected packages: spam
Running setup.py install for spam ... done
Successfully installed spam-0.1

文件现在已正确放置:

$ pip show -f spam
Name: spam
Version: 0.1
...
Location: /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages
Requires:
Files:
../../../../../.my_config
spam-0.1-py3.6.egg-info/PKG-INFO
spam-0.1-py3.6.egg-info/SOURCES.txt
spam-0.1-py3.6.egg-info/dependency_links.txt
spam-0.1-py3.6.egg-info/top_level.txt

不幸的是,必须单独通知用户有关使用额外 key 调用 pip install(通过自述文件、网页常见问题解答或类似内容),因为不可能禁止在包元数据中构建轮子。

因此,我不再包含具有绝对路径的文件。相反,我将它们与 site-packages 目录中的 python 源一起安装。在 python 代码中,如果需要,我必须为存在性检查和文件复制添加额外的逻辑:

# program entrypoint

if __name__ == '__main__':
config = os.path.join(os.path.expanduser('~'), '.my_config')
if not os.path.exists(config):
shutil.copyfile('.my_config', config)
main.run()

关于python - 安装时复制配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47460804/

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