Python 适当的相对进口:;无法导入模块";
我的项目结构如下:Python 适当的相对进口:;无法导入模块";,python,python-3.x,visual-studio-code,Python,Python 3.x,Visual Studio Code,我的项目结构如下: . └── myapp ├── app.py ├── models │ ├── hello.py │ └── world.py └── requirements.txt from models.hello import Hello from models.world import World 我有两种型号,hello和world。这两个模型都是从app.py中使用的,在这里我像这样导入它们: . └── myapp
.
└── myapp
├── app.py
├── models
│ ├── hello.py
│ └── world.py
└── requirements.txt
from models.hello import Hello
from models.world import World
我有两种型号,hello
和world
。这两个模型都是从app.py
中使用的,在这里我像这样导入它们:
.
└── myapp
├── app.py
├── models
│ ├── hello.py
│ └── world.py
└── requirements.txt
from models.hello import Hello
from models.world import World
但是world
也需要使用hello
。我在world.py中试过这个:
from models.hello import Hello
当我运行应用程序时,上述技术是有效的,但VSCode的Python扩展给了我以下错误:
E0401:Unable to import 'models.hello'.
从同一目录导入子模块的正确方法是什么?如何在VSCode中避免此错误?由于hello.py和world.py位于同一文件夹(aka package)中,您应该在world.py中导入hello类,如下所示:
from .hello import Hello
如本线程中所述:
这里的
表示从当前包导入。您收到的错误是一个名为pylint
的python linter报告的错误。因此,问题并不是真正特定于vscode扩展
有两种解决方案:
请尝试使用vapePYTHONPATH=./myapp
在项目目录中添加一个.env
文件,这将告诉pylint在哪里可以找到您的模块
或者直接在vscode中打开文件夹myapp
,而不是在vscode中打开父目录
错误来自pylint。您需要将此行添加到settings.json文件(VS代码):
“python.linting.pylintArgs”:[“--init hook”,
“导入sys;sys.path.append(“”)”,
在.vscode/settings.json
(工作区的根目录)中,您需要以下两行:
一个是在虚拟环境中使用pylint(如果您有),以便pylint知道它。如果您的pylint或虚拟环境位于不同的位置,则需要调整以下参数
“python.linting.pylintPath”:“${workspaceFolder}/api/venv/bin/pylint”
还有一个,作为Shtefan,让pylint知道项目的python部分在哪里:
“python.linting.pylintArgs”:[
“--init hook”,
“导入sys;sys.path.append('${workspaceFolder}/api')”
]
如果您的虚拟环境中尚未设置vscode,则此附加行可能会有所帮助。如果您的虚拟环境路径与下面的路径不匹配,则可能需要再次进行修改
“python.pythonPath”:“${workspaceFolder}/api/venv/bin/python”,
希望您的所有模块中都有init文件。这可以解决应用程序中的vscode错误app.py
是应用程序的入口点,因此即使在world.py中,我也无法从hello导入,因为hello位于models中,而不是项目根目录中。我没有收到名为“你好”的模块。
@jimmysanschez你是对的,我已经更新了我的答案。它应该是来自的。hello导入hello
使用来自模型的有什么问题。hello导入hello
?错误是否有任何解释,或者是vs扩展无法正确理解导入?使用.env
文件解决了vs代码无法按住ctrl键并单击导航到导入的本地类的问题。谢谢我似乎太蠢了,不能这样做。请您更具体地举一个关于venv的例子好吗?我也不知道myapp的定义。Thanks@Christian您可以在项目的根目录下创建一个.env
文件,并将变量PYTHONPATH=path\u放入到您的\u包中。在作者示例中,从根目录到is package的路径是/myapp
,因此他需要将变量PYTHONPATH=./myapp
放入env文件中,每个项目都有一个venv。哪一条路是门?我不使用venv。但根据doco,您可以尝试使用以下参数:sys.prefix和sys.exec_prefix。另一种选择是切换到不同的短绒。最近我开始使用flake8,到目前为止一点问题也没有。我已经搜索了几个小时,这就解决了它!谢谢使用from models.hello导入hello有什么问题?是否有任何错误的解释,或者是vs扩展无法正确理解导入?