问题
在包含子程序包的Python项目中,绝对导入在不在项目根目录中的任何文件中都不起作用.
- my_project
- my_package
- __init__.py
- my_module.py
- my_scripts
- some_script.py
some_script.py
个
import sys
print('\n'.join(sys.path))
from my_package.my_module import hello_world
hello_world()
Output (PyCharm)
个
D:\_MyFiles\Programming\Projects\python-import-demo\my_scripts
D:\_MyFiles\Programming\Projects\python-import-demo
***list of unrelated paths***
Hello, World!
Output (VS Code)
个
d:\_MyFiles\Programming\Projects\python-import-demo\my_scripts
***list of unrelated paths***
Traceback (most recent call last):
File "d:\_MyFiles\Programming\Projects\python-import-demo\my_scripts\some_script.py", line 4, in <module>
from my_package.my_module import hello_world
ModuleNotFoundError: No module named 'my_package'
变通办法
- 使用相对导入(这会打破
__main__
个块) - 编辑项目级
launch.json
配置(通过顶栏或CLI运行.py
文件时仍会出现问题) - 跑
pip install -e MY_PROJECT
(我不想对我打开的每个项目重复这一点) - 显式地找到项目根目录,并在我自己的代码中将其附加到
sys.path
(在我看来,这很恶心,但如果我想将项目发送给某人,并且让他们在没有额外配置的情况下简单地工作,这是很好的)
问题
有没有办法在全局解决VS代码的这个问题?当我在PyCharm中打开一个项目并运行任何.py
文件时,绝对导入只会自动工作,不需要任何手动配置,因为项目根被添加到sys.path
,这就是我想要的VS代码.我不想在每个新项目上都使用上面的任何变通方法.