我在此文件夹的Mac OS上使用python3.6创建了venv
/Users/kim/Documents/Apps/PythonApps/python36-miros-a3
激活虚拟环境后,我运行了pip install pylint
我的工作区在/Users/kim/Documents/Apps/WebApps/miros-a3
在我的vscode工作区中,我具有以下工作区设置
{
"folders": [
{
"path": "."
}
],
"settings": {
"python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
"python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
}
}
我尝试为pylint设置自定义路径,并更改venvpath。
pylint一直抱怨进口声明说它不存在。
如您所见,它们位于同一文件夹中,我绝对可以执行我的python文件。
我该如何避免这些错误的肯定的导入错误?
我也尝试了以下方法:
code
来激活vscode 答案 0 :(得分:4)
Pylint有一些怪癖。在这种情况下,它不知道在哪里找到模块,因为它位于venv路径的子目录中。要解决这个问题:
将此设置放入您的工作区或文件夹设置中:
"python.linting.pylintArgs": [
"--init-hook",
"import sys; sys.path.append('<path to folder your module is in>')"
]
或者可能更好
生成.pylintrc文件。从带有venv激活运行的集成终端:
pylint --generate-rcfile > .pylintrc
然后打开生成的文件,并取消注释 init-hook = 部分为
init-hook='import sys; sys.path.append("<path to folder you module is in>")'
阅读 .pylintrc 并根据需要调整设置。在这两种情况下,路径都应指向“数据库”文件夹。
了解了pylint设置后,请按照正确的方式进行操作:
from database.database_dispatcher import ...
请参见Anthony Sottile的this answer。
答案 1 :(得分:3)
对我来说,pylint
在此处标记此错误是正确的
顶层模块是database
(包含一个__init__.py
文件)
您的导入应看起来像(完全绝对)
from database.database_dispatcher import ...
或(显式相对)(是的!模块名称前的.
是有意的)
from .database_dispatcher import ...
我的后续猜测是,您当前正在以python ./database/main.py ...
的形式调用脚本,该脚本会将./database
放在sys.path
的开头,因此它会出现导入工作正常-但是,这却在绕开模块结构。您应该改为使用python -m database.main ...
来调用脚本。
请注意,在python 3.x中删除了相对隐式导入-尽管脚本sys.path
插入的这种(imo)缺陷仍然存在。
答案 2 :(得分:1)
我只需要0.02美元就可以解决自己的问题。
我的问题完全与在全球安装pylint以及在venv中编码有关。 vscode试图使用全局安装的pylint,它根本不知道我在Python venv中安装的依赖项。这个answer解决了我的问题。它指向here,它解释了如何配置vscode以使用venv运行我的项目。一旦完成该操作,vscode就会立即发出警告,提示我未安装任何棉绒工具,并提示我安装工具。完成之后,我的绒毛假阳性就消失了。
答案 3 :(得分:0)
扩展Gatmando的答案,您需要告诉vscode使用.env
中的pylint而不是全局pylint:
在您的工作区设置文件:.vscode/settings.json
中,添加python.linting.pylintPath
并将其指向pylint
中的virtualenv
包:
{
"python.pythonPath": ".env/bin/python",
"python.linting.pylintPath": ".env/bin/pylint"
}