英文:
ModuleNotFound error in Python but directory is on sys.path
问题
好的,以下是翻译好的部分:
从我的项目根目录开始 - 位于 /user/user4769/development/python-utils:
从根目录运行:
python3.8 /user/user4769/development/python-utils/company/team/user_utils/main.py 或者带有 -m 标志的相同命令。正如预期的那样,当我打印 sys.path 时,main.py 的当前目录被首先添加 - 所以我看到:
['/user/user4769/development/python-utils/company/team/user_utils', ....]
在我的 main.py 中,我有:
import company.team.user_utils.utils
但我收到 ModuleNotFound 错误。
如果我添加这行 sys.path.append(os.getcwd()),那么我的根文件夹 /user/user4769/development/python-utils/ 将被添加到路径中,然后导入就能正常工作。
我漏掉了什么?这是 Python3.8。
英文:
Ok, so here is my directory structure
company
└── team
└── user_utils
├── __init__.py
├── test.py
├── utils.py
from the root of my project - which is at /user/user4769/development/python-utils
From the root I run :
python3.8 /user/user4769/development/python-utils/company/team/user_utils/main.py or the same with -m flag. As expected, when I print sys.path the current directory of main.py is added first - so I do see :
['/user/user4769/development/python-utils/company/team/user_utils', ....]
In my main.py I do have :
import company.team.user_utils.utils
But I do get ModuleNotFound
If I add this sys.path.append(os.getcwd()) then /user/user4769/development/python-utils/ which is my root folder gets added onto the path, and then import works.
What am I missing? This is Python3.8
答案1
得分: 1
你要翻译的内容如下:
你尝试导入的顶级模块是 company,所以为了使其工作,你需要将 /user/user4769/development/python-utils/ 添加到你的路径中,正如你也已经发现的那样。我相信 company 和 team 目录中还需要有 __init__.py 文件。如果你想将 user_utils 目录视为要导入模块的位置,正如你所指出的在你的路径中,一个简单的 import utils 就可以。
点符号仅用于从具有子模块的分层模块中导入子模块和元素。所以如果 company 是模块,并且有一个子模块 .team.user_utils.utils。
**注意:**考虑到你的导入在你的路径中包含 .../python-utils 时有效,我敢打赌 company 确实是一个分层模块。如果是这种情况,utils.py 可能会使用 company 模块的其他部分的元素,因此直接导入它而不是作为子模块可能完全行不通。
英文:
The (top) module you are trying to import is company so for this to work you need to have /user/user4769/development/python-utils/ in your path, as you have also found out. And I believe there also needs to be __init__.py files in the company and team directories. If you want to treat the user_utils directory as a location to import modules from, as implied by having pointing out it is in your path, a simple import utils will do.
The dot notation is only for importing submodules and elements from a hierarchical module with submodules. So if company was the module, with (one) submodule being .team.user_utils.utils.
Note: given that your import works with .../python-utils in your path, I'd wager that company is indeed a hierarchical module. If that is the case, utils.py may utilise elements from other parts of the company module, in which case importing it directly and not as a submodule may very well not work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论