为了账号安全,请及时绑定邮箱和手机立即绑定

如何制作 pip 安装包数据(配置文件)?

如何制作 pip 安装包数据(配置文件)?

慕姐4208626 2022-06-02 12:14:30
我有一个名为clana( Github , PyPI ) 的包,其结构如下:.├── clana│   ├── cli.py│   ├── config.yaml│   ├── __init__.py│   ├── utils.py│   └── visualize_predictions.py├── docs/├── setup.cfg├── setup.py├── tests/└── tox.inisetup.py 看起来像这样:from setuptools import find_packagesfrom setuptools import setuprequires_tests = [...]install_requires = [...]config = {    "name": "clana",    "version": "0.3.6",    "author": "Martin Thoma",    "author_email": "info@martin-thoma.de",    "maintainer": "Martin Thoma",    "maintainer_email": "info@martin-thoma.de",    "packages": find_packages(),    "entry_points": {"console_scripts": ["clana=clana.cli:entry_point"]},    "install_requires": install_requires,    "tests_require": requires_tests,    "package_data": {"clana": ["clana/config.yaml"]},    "include_package_data": True,    "zip_safe": False,}setup(**config)如何检查它没有工作快的python3 setup.py sdistopen dist/clana-0.3.8.tar.gz  # config.yaml is not in this file真正的检查我认为这将确保它与安装软件包时config.yaml位于同一目录中。cli.py但是当我尝试这个时:virtualenv venvsource venv/bin/activatepip install clanacd venv/lib/python3.6/site-packages/clanals我得到:cli.py  __init__.py  __pycache__  utils.py  visualize_predictions.py我将它上传到 PyPI 的方式:python3 setup.py sdist bdist_wheel && twine upload dist/*所以config.yaml缺少了。我怎样才能确定它在那里?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您可以在要添加的文件列表MANIFEST.in旁边添加一个文件名setup.py,允许使用通配符(例如:include *.yamlinclude clana/config.yaml),然后该选项include_package_data=True将激活清单文件



查看完整回答
反对 回复 2022-06-02
?
弑天下

TA贡献1818条经验 获得超8个赞

简而言之:添加config.yamlMANIFEST.in,并设置include_package_data。一个没有另一个是不够的。

基本上它是这样的:

  1. MANIFEST.in将文件添加到sdist源分发)。

  2. include_package_data将这些相同的文件添加到bdist构建的发行版),即它扩展了MANIFEST.into的效果bdist

  3. exclude_package_data防止sdist将文件添加到 中bdist,即过滤include_package_data.

  4. package_data将文件添加到bdist,即它向您添加构建工件(通常是自定义构建步骤的产品)bdist,当然对sdist.

因此,在您的情况下,该文件config.yaml未安装,因为它未添加到您的bdist构建的发行版)中。根据文件的来源,有两种方法可以解决此问题:

  • 要么该文件是构建工件(通常它是在该./setup.py build阶段以某种方式创建的),那么您需要将其添加到package_data;

  • 或者该文件是您的源代码的一部分(通常在您的源代码存储库中),那么您需要将其添加到MANIFEST.in、 setinclude_package_data并将其排除在外exclude_package_data(这似乎是您的情况)。

看:


查看完整回答
反对 回复 2022-06-02
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

根据包含数据文件的文档,如果您的包有文件等数据文件.yaml,您可以像这样包含它们:


setup(

    ...

    package_data={

        "": ["*.yaml"],

    },

    ...

)

这将允许包含您的包中具有文件扩展名的任何文件.yaml。


查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信