在 Python 包中查找数据文件 - setup.py 的 package_data=... 可能已损坏?
Posted
技术标签:
【中文标题】在 Python 包中查找数据文件 - setup.py 的 package_data=... 可能已损坏?【英文标题】:find data files inside a Python package - setup.py's package_data=... maybe broken?在 Python 包中查找数据文件 - setup.py 的 package_data=... 可能已损坏? 【发布时间】:2021-09-26 14:38:03 【问题描述】:我有同样的情况,比如here、here、here 和here。我遵循了这些问题中给出的建议,但仍然收到 FileNotFoundError。
--树--
.
MANIFEST.in
setup.py
...
--src
|--__init__.py
|--mypkg
|--__init__.py
|--module_1.py # dosth_1() in module_1 needs somedata.json
...
|--data
|--__init__.py
|--somedata.json
|--someotherdata.txt
...
--setup.py--
packages=["mypkg"],
package_dir="": "src",
package_data="mypkg": ["data/*.txt", "data/*.json"],
--删除旧版本后--
(venv)$ python3 -m build
...
copying src/mypkg/somedata.json -> .../src/mypkg/data
...
adding 'mypkg/data/somedata.json'
...
--下一个--
将 mypkg 上传到 PyPI pip install mypkg(在不同的 vEnv 中)--打开python解释器--
>>from mypkg import module_1
>>res = module_1.dosth_1()
--抛出错误--
... 文件“/usr/lib/python3.8/importlib/resources.py”,第 82 行,在 _check_location raise FileNotFoundError(f'Package has no location package!r') FileNotFoundError: Package has no location
所以我真的很困惑为什么会发生这种情况。我处理了 init.py,按照宣传的方式完成了 setup.py,如果我正确理解了构建 cmets,则将数据文件添加到构建中。安装的软件包仍然无法访问数据。这里有什么问题?
【问题讨论】:
数据文件真的是用pip
安装的吗?即,他们在site-packages/mypkg/data
中吗?
@MattDMo 是的,我可以看到所有这些。
【参考方案1】:
通过更改 setup.py 来解决它:
packages=["mypkg"],
package_dir="": "src",
package_data="mypkg": ["data/*.txt", "data/*.json"],
到:
packages=["mypkg"],
include_package_data=True,
package_dir="": "src",
对我来说,这似乎很模糊。这实际上让我想知道 package_data=... 是否可能损坏了。
【讨论】:
以上是关于在 Python 包中查找数据文件 - setup.py 的 package_data=... 可能已损坏?的主要内容,如果未能解决你的问题,请参考以下文章
RobotFramework + Python 自动化入门 五 (Suite Setup/Teardown+Resource文件+Locator和数据封装)