Python ModuleNotFoundError不在工作目录中时;getcwd查找模块

Python ModuleNotFoundError不在工作目录中时;getcwd查找模块,python,directory-structure,Python,Directory Structure,当我尝试使用python3.6 src/main.py运行python文件时(工作目录位于src上方),从路径src导入另一个模块时出现此错误: from src import another_module ModuleNotFoundError:没有名为“src”的模块 当我这样做的时候 print(os.getcwd()) print(os.listdir(os.getcwd())) 我得到了预期的结果: 路径/到/工作/目录 ['src'] 当我使用PyCharm运行脚本时,导入工作正

当我尝试使用
python3.6 src/main.py
运行python文件时(工作目录位于
src
上方),从路径
src
导入另一个模块时出现此错误:

from src import another_module
ModuleNotFoundError:没有名为“src”的模块

当我这样做的时候

print(os.getcwd())
print(os.listdir(os.getcwd()))
我得到了预期的结果:

路径/到/工作/目录

['src']


当我使用PyCharm运行脚本时,导入工作正常,但我需要在PyCharm外部运行它。

当您在命令行上运行python脚本时,脚本的目录(可能与shell当前工作目录不同)会添加到路径中


因此,由于
src/
已经在您的路径中,您可以说
导入另一个\u模块

以使
src
成为一个包,通过在工作目录中创建另一个文件
run.py
,调用
src/main.py
,并从命令行运行
run.py
,而不是在launch.json中运行
src/main.py

,从而创建一个名为
src/\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuy.py
的空文件,将以下行添加到部署中:

"env": {"PYTHONPATH": "${workspaceRoot}"}
这似乎迫使Python评估相对于
${workingSpaceRoot}
文件夹的导入;允许您使用完全限定的名称:从src导入

默认行为是相对地计算名称空间。因此,您的原始语句:
from src import…
实际上是在
src/src/…
中查找


(要感谢@g4th在另一个StackOverflow上发布了此解决方案。)

\uu init\uuuuuuuuuuupy
在Python 3中不是必需的。我仍然收到相同的错误:
print(os.getcwd())print(os.listdir(os.getcwd())print(os.listdir('src'))from src import my_module path/to/working/directory
['src']>['pycache','my_module.py','init.py']>>回溯(最近一次调用):文件“src/main.py”,第12行,在>from src import time\函数中作为time>modulenofounderror:文档中没有名为'src'的模块显示目录结构应该是什么样子。python3仍然需要
\uuu init\uuuuuuuuuuuuuupy
。@Raphael:你从哪里执行这些python语句?在你的顶级目录中的一个文件?我的错误;我忽略了这一点您将
src
制作成一个包,而不仅仅是一个可导入的模块。这很有趣,但是它在PyCharm中不再工作了(因为工作目录在PyCharm上设置正确;工作目录不是“src”)。有没有办法让它在这两种情况下都工作?但是
print(os.listdir(os.getcwd())很奇怪
找到模块,导入命令没有。您是如何调用
src/main.py
(在
run.py
)的?@nicolas
从src import main
然后
main.main()
调用的,而您没有文件
\uuu init\uuuuu.py
?@nicolas否,我没有。