Problem
在带有子包的 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__
blocks)
- 编辑项目级别
launch.json
配置(运行时仍然出现问题.py
通过顶部栏或 CLI 的文件)
- Run
pip install -e MY_PROJECT
(我不想为我打开的每个项目重复此操作)
- 显式找到项目根目录并将其附加到
sys.path
在我自己的代码中(在我看来,这很恶心,但如果我想将项目发送给某人并让它简单地工作而无需他们进行额外的配置,那很好)
我找到了所有这些解决方法here https://stackoverflow.com/questions/14132789/relative-imports-for-the-billionth-time and here https://fadil-nohur.medium.com/resolving-intra-project-imports-in-python-a-simple-guide-visual-studio-code-98472b0a8f59
Question
有没有办法在全球范围内解决 VS Code 的这个问题?当我在 PyCharm 中打开一个项目并运行任何.py
文件中,绝对导入会自动工作,无需任何手动配置,因为项目根目录被添加到sys.path
这就是我想要的 VS Code。我不想在每个新项目上都使用上述任何解决方法。