嗨,我正在使用 python 包装。我有 3 个non-code文件,即['synonyms.csv', 'acronyms.csv', 'words.txt'].
Wordproject/WordProject/Repository/DataBank/ RepositoryReader在路上有一堂课Wordproject/WordProject/Repository/ RepositoryReader然后查找一个subdirectory被调用DataBank的文件并在那里查找 3 个文件。问题是当我创建一个egg代码,然后运行它时,
我的代码给了我错误:
在 X:\1 找不到文件。Projects\Python\Wordproject\venv\lib\site-packages\Wordproject-1.0-py3.6.egg\Wordproject\Repository\DataBank\synonyms.csv
如果路径是鸡蛋,则无法获取文件或从路径中读取文件。有什么办法可以解决吗?这些文件必须在egg.
您可以在这里尝试做两件不同的事情:
\n\npip install,放在您可以正常访问的位置。PyPA/ 文档中有关数据文件的部分对两者进行了解释setuptools。我想你想要这里的第一个,它在“在运行时访问数据文件”小节中介绍:
\n\n\n通常,现有程序会操作 package\xe2\x80\x99s
\n__file__属性来查找数据文件的位置。但是,此操作与基于 PEP 302 的导入挂钩(包括从 zip 文件和 Python Egg 导入)\xe2\x80\x99 不兼容。强烈建议,如果您使用数据文件,则应使用ResourceManager API来pkg_resources访问它们。该pkg_resources模块作为 的一部分进行分发setuptools,因此如果您\xe2\x80\x99 用于setuptools分发包,则没有理由不使用其资源管理 API。另请参阅访问包资源__file__以获取将 use 转换为 use的代码的快速示例pkg_resources。
点击该链接,您会发现一些看起来像一些粗俗的旧 PEAK 文档,但这只是因为它们确实是粗俗的旧 PEAK 文档。文档中隐藏着一个版本setuptools,一旦您设法找到它,您可能会发现它更易于阅读和导航。
正如它所说,您可以 try使用get_data(这将在 Egg/zip 中工作),然后回退到访问文件(这将在从源代码运行时工作),但是您最好使用pkg_resources. 基本上,如果您的代码执行此操作:
path = os.path.join(__file__, \'Wordproject/WordProject/Repository/DataBank/\', datathingy)\nwith open(path) as f:\n for line in f:\n do_stuff(line)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 你将其更改为:
\n\npath = \'Wordproject/WordProject/Repository/DataBank/\' + datathingy\nf = pkg_resources.resource_stream(__name__, path)\nfor line in f:\n do_stuff(line.decode())\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,resource_stream文件始终以二进制模式打开。因此,如果您想将它们作为文本读取,则需要将TextIOWrapper它们包裹起来,或者对每一行进行解码。
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |