Pav*_*oka 4 python project-structure python-poetry
理解Python诗歌1
\n我遇到了一个奇怪的问题。\n一个小应用程序 - 字典,在命令行中工作:
\n$ lexi\nUsage: lexi word\n\n$ lexi zoo\n\xd0\xb7\xd0\xbe\xd0\xbe\xd0\xbf\xd0\xb0\xd1\x80\xd0\xba\n\n$ lexi qwerty\nThere\'s not word \'qwerty\' is in the lexicon\nRun Code Online (Sandbox Code Playgroud)\n项目结构:
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 poetry_test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 data\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lexicon.json # dictionary file\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lexi.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\nRun Code Online (Sandbox Code Playgroud)\n词典.py:
\n#!/usr/bin/env python3\n \nimport sys\nimport json\n \nLEXICON_DB = "poetry_test/data/lexicon.json"\n \n \ndef main():\n args = sys.argv\n if len(args) != 2:\n print("Usage: lexi word")\n sys.exit(1)\n \n word = args[1]\n lexicon = json.load(open(LEXICON_DB))\n translation = lexicon.get(word)\n if translation:\n print(translation)\n else:\n print(f"There\'s not word \'{word}\' is in the lexicon")\n \n \nif __name__ == \'__main__\':\n main()\n\nRun Code Online (Sandbox Code Playgroud)\n如果我使用命令在项目根文件夹中运行
\n$ poetry run lexi zoo\nRun Code Online (Sandbox Code Playgroud)\n它在各方面都工作得很好。
\n使用命令安装发行版后,系统中的任何地方都可以使用$ python3 -m pip install .该命令lexi,即软件包的安装已成功:
$ lexi\nUsage: lexi word\n\n$ whereis lexi\nlexi: /home/paalso/.local/bin/lexi\nRun Code Online (Sandbox Code Playgroud)\n在项目根文件夹中lexi,已经没有poetry run也完全可以正常工作
但是,当我尝试使用参数(要翻译的单词)在系统中的其他位置运行它时,当应该访问数据文件 lexicon.json 时,会发生错误:
\n$ lexi zoo\nTraceback (most recent call last):\n File "/home/paalso/.local/bin/lexi", line 8, in <module>\n sys.exit(main())\n File "/home/paalso/.local/lib/python3.8/site-packages/poetry_test/lexi.py", line 16, in main\n lexicon = json.load(open(LEXICON_DB))\nFileNotFoundError: [Errno 2] No such file or directory: \'poetry_test/data/lexicon.json\'\nRun Code Online (Sandbox Code Playgroud)\n也就是说,数据文件 data/lexicon.json 似乎不可用,即在安装过程中,它似乎没有安装,即它没有随应用程序进入系统。\n如何修复此问题?\n到目前为止我在诗歌文档中没有找到它
\n\n访问包的数据文件的首选方法是importlib.resources。还有一个名为importlib-resources 的向后移植。
将__init__.py文件放入数据文件夹后,您可以打开文件,如下所示:
lexicon = json.load(importlib.resources.open_text("mypackagename", "data/lexicon.json"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2703 次 |
| 最近记录: |