gpt4 book ai didi

python - 如何在模块中包含 *.py 以外的文件?

转载 作者:行者123 更新时间:2023-12-01 07:04:03 25 4
gpt4 key购买 nike

我正在尝试构建一个 python 3 模块。我希望模块从 .txt 文件中读取内容。(我的用例是 .txt 文件是 Jinja2 模板。但我们现在忽略它。)

当我使用pip安装模块时,我发现只有.py文件被复制,而.txt文件被复制被忽略。

这是为什么?

MWE

为了简单起见,我避免使用 Jinja2。我只是想读取一个文件并将其返回。

文件

文件树:

* mymodule/
* mymodule/
* __init__.py
* file.txt
* main.py
* setup.py

setup.py

from setuptools import setup

setup(name='mymodule',
version='0.3',
description='Test for stack overflow MWE',
license='Proprietary',
author='Matthew Davis',
url='https://example.com',
author_email='nobody@example.com',
packages=['mymodule'],
install_requires=[],
zip_safe=False)

__init__.py

from .main import main

ma​​in.py

import os

def main():

this_dir = os.path.dirname(os.path.abspath(__file__))
fname = 'file.txt'
print(f"Looking for file {fname} inside {this_dir}")

print(f"Files in {this_dir}: {os.listdir(this_dir)}")

with open(os.path.join(this_dir, fname),'r') as f:
content = f.read()

print("It works!")

return content

文件.txt

Here is my file.

步骤

使用 python 3。(我在 virtualenv 中执行此操作。)

pip3 install ./mymodule

import mymodule
mymodule.main()

预期行为

mymodule.main() 返回“这是我的文件。”

实际行为

>>> mymodule.main()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ec2-user/environment/repo/workload/env/local/lib/python3.6/dist-packages/mymodule/main.py", line 2, in main
with open('file.txt') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'

当我查看该回溯中的目录时:

ls /home/ec2-user/environment/repo/workload/env/local/lib/python3.6/dist-packages/mymodule/

我只看到

  • __init__.py
  • main.py
  • __pycache__

所以这不仅仅是路径相对位置的问题。我需要的文件在安装过程中并未被复制。

如果我将 file.txt 重命名为 file.py (并相应地更改 fname),它就可以工作。(例如,mymodule.main() 返回一个与 file.py 的内容匹配的字符串)但这不是一个令人满意的解决方法,因为我不想用 .py 命名非 python 文件。

最佳答案

看起来解决方案是修改 setup.py 为:

setup(
...
include_package_data=True,
package_data={'':['*.txt']}
)

link

关于python - 如何在模块中包含 *.py 以外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514702/

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