当前位置: 首页 > 面试题库 >

在安装时复制配置文件

赵选
2023-03-14
问题内容

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

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

如果使用python setup.py install,这似乎可以正常工作,但是当我将程序包上传到PyPI并运行时pip install,不会复制dotfile。

FWIW,我将点文件放在中MANIFEST.in,还尝试包含的package_data参数setup。这些步骤似乎都不起作用。如果我pip installsite-packages目录中四处张望,则仅源文件在此处。

我如何才能找到想要的?


问题答案:

这是我曾经经历过的一个问题。它的根源在于,当您构建一个wheel文件时,在其中指定的所有绝对路径data_files都将相对于目标site- packages目录,请参见github上的此问题。通过进行该影响安装pip install,因为它会建立一个车轮的任何源包的(.tar.gz.tar.bz2.zip),并安装所得到的车轮:

$ pip install spam-0.1.tar.gz 
Processing ./spam-0.1.tar.gz
**Building wheels for collected packages: spam
  Running setup.py bdist_wheel for spam ... done**
  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:
  **Users/hoefling/.my_config**
  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

不幸的是,必须pip install使用附加键(通过自述文件,网页FAQ或类似方法)分别告知用户有关使用附加键进行呼叫的信息,因为不可能禁止在打包元数据中构建轮子。

结果,我不再包含具有绝对路径的文件。相反,我将它们与site- packagesdir中的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()


 类似资料:
  • 我有一个本地依赖,它托管在一个私人Gitlab回购。然而,我很难通过作曲家将其拉入我的项目。 我的: 当我在供应商目录中查找目录时,当我不期望的时候,目录是双倍的,例如 当我运行时,当Symfony尝试执行缓存时,我会得到以下错误:清除: Script Sensio\Bundle\分布式Bundle\Composer\ScriptHandler::clearCache处理以异常终止的post-up

  • 系统环境需求及注意事项 Win平台使用DedeAMPZ快速安装

  • 本文向大家介绍VS2019安装配置MFC(安装vs2019时没有安装mfc),包括了VS2019安装配置MFC(安装vs2019时没有安装mfc)的使用技巧和注意事项,需要的朋友参考一下 1.查看vs2019里面有没有配置MFC 新建项目,如果能在右边找到MFC应用则配置了,否则没有 2.*如果没有安装,将右边的的竖直移动条拉到底部,点击安装多个工具和供能* 3.选中在C++桌面开发==》在右侧选

  • 我正在尝试安装和配置nginx,但我需要复制一个完整的配置文件。我尝试简单地将它添加到Dockerfile中,因为它只有几行,但Dockerfile似乎对多行命令没有很好的支持。我的意思是我需要复制我的配置文件的原样,我不能污染它的'sed','cat'或'\'在每一行。 有些人建议将配置文件放在公共git存储库中,我想如果没有其他方法的话,我可以这么做。但我一点也不喜欢,因为这没道理。我不想为这

  • WorkerMan实际上就是一个PHP代码包,如果你的PHP环境已经装好,只需要把WorkerMan源代码或者demo下载下来即可运行。 windows用户(必读) windows用户需要使用windows版本的workerman,windows版本workerman本身不依赖任何扩展,只需要配置好PHP环境变量即可,windows版本workerman安装及注意事项参见windows用户必看。

  • 我正在尝试安装h5py并执行sudo pip3安装h5py 我也尝试安装h5py通过车轮从https://pypi.python.org/pypi/h5py/2.7.0rc2 我已经安装了python 3.5。然后pip3会因该输出而崩溃: 我在Ubuntu 16.04上运行。3升 我不认为pip3坏了,因为我以前安装了很多pip3。 我能做什么呢? 谢谢。