英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论