VSCode中的绝对导入失败

2024-06-28 19:01:48 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个项目的结构如下:

Folder
   folderA
   folderB
   folderC
   folderD

folderD有我的项目启动“位置”,在该项目中,我添加了folderA/B/C作为我的结构/依赖项。 现在我可以做import folderA.someModule。现在这是伟大的魅力。。。但是如果我想使用VS代码,那么这个项目就不再有效了。因为PyCharm在“运行时”创建这些环境

有谁会这么好心,让我知道我如何在VScode中做到这一点?或者我应该向我的sys.path添加哪些环境变量以使其工作?我迷路了。向sys.path添加一些路径有帮助,但一些导入仍然不起作用


Tags: path项目代码importsysfolder结构pycharm
1条回答
网友
1楼 · 发布于 2024-06-28 19:01:48

最重要的是,Pycharm为嵌套文件夹做了奇怪的工作

假设我们有main.py如下所示:

try:
    import Module

    print("Direct import")
except ImportError:
    from os.path import abspath, dirname
    from sys import path

    path.append(dirname(abspath(__file__)) + "/..")
    import Module
    
    print("Relative import")


from os import getcwd

print(f"Current script dir: {__file__}")
print(f"Module dir: {Module.__file__}")
print(f"Working dir: {getcwd()}")

Module.__init__不包含任何内容

对于以下结构:

Project
├ Source
│  └ main.py
└ Module
   └ __init__.py

执行main.py会直接导入

Direct import
Current script dir: Z:/github/PersonalToolkit/Source/main.py
Module dir: Z:\github\PersonalToolkit\Module\__init__.py
Working dir: Z:\github\PersonalToolkit\Source

但是,对于以下结构:

Project
└ Root
   ├ Source
   │  └ main.py
   └ Module
      └ __init__.py
Relative import
Current script dir: Z:/github/PersonalToolkit/Root/Source/main.py
Module dir: Z:\github\PersonalToolkit\Root\Source/..\Module\__init__.py
Working dir: Z:\github\PersonalToolkit\Root\Source

然而,对于这两种情况,Pycharm显示了相同的导入提示

enter image description here

由此我们可以猜测Pycharm在运行时将项目根添加到了sys.path,并创建了这种不同的行为

然而,我们不能期望在通常运行的情况下(主要是控制台)的行为会得到一致的结果

相反,在外部文件夹中导入模块时,只需按如下方式导入:

from os.path import abspath, dirname
from sys import path

path.append(dirname(abspath(__file__)) + "/..")
import Module

这确实违反了PEP-8,看起来不干净。最好将__main__.py放在外部,让它导入main.py,并使main.py在导入时运行代码,而不使用if __name__ == "__main__":样板文件

Project
├ __main__.py
├ Source
│  └ main.py
└ Module
   └ __init__.py

相关问题 更多 >