我正在处理python3中的Python代码,该代码导入了几个自定义库。这些库位于文件结构中。从命令窗口运行代码时,导入这些库没有问题,但是当我在Visual Studio Code中打开文件时,pylint给我所有自定义库导入的导入错误。
我对此问题进行了许多令人沮丧的研究,发现很多人也遇到过类似的问题。但是,我无法使用任何列出的解决方案来工作,但是我什至不了解甚至无法尝试。我试图卸载并重新安装VScode,pylint和python扩展本身。我已经尝试过一些将launch.json和settings.json弄乱的事情,但是之前我从未对json文件做过任何事情,而且我所做的一切似乎没有任何区别。我只安装了一个python环境。我尝试使用“文件->打开文件夹...”打开文件夹,而不是使用上下文窗口方法。该代码使用sys.path.append,以便可以找到具有该库的正确目录,并且正如我所说的,从命令窗口运行时,此方法可以正常工作。
我看到的另一个解决方案是添加一行
init-hook='import sys; sys.path.append("/path/to/root")'
到文件〜/ .pylintrc。我认为我已经做到了,但再次没有解决我的问题。但是,对于此文件是什么,在哪里可以找到它或所需的路径几乎没有解释。我只是在文件资源管理器中搜索“ .pylintrc”,然后找到了一个刚好位于该行中的文件。通过导航到将所有库保存在子文件夹中的文件夹,然后复制/粘贴文件路径,获得了“ root路径”。
以下是如何导入库的示例。这行得通,只是不涉及pylint或VScode。
#Custom libraries
sys.path.append(os.path.join( '../..', 'common', 'appdata'))
import appdata
“无法导入'appdata'pylint(导入错误)” 显示为“导入”错误
如果我尝试调试,则会收到消息
“发生异常:ImportError 没有名为“ appdata”的模块”
我感谢能提供的任何帮助。谢谢。
答案 0 :(得分:0)
.pylintrc
文件是Pylint的配置文件。皮林特documents how it finds a pylintrc
file。
问题在于Pylint无法执行您的代码,因此Pylint不知道您对sys.path
的自定义操作。因此,您需要做的是弄清楚如何告诉Pylint将代码中包含的文件夹视为sys.path
的一部分。一种方法是指定PYTHONPATH
,另一种方法是在.pylintrc
文件中指定它。
P.S。:sys.path.append(os.path.join( '../..', 'common', 'appdata'))
应该为sys.path.append(os.path.join( '..', '..', 'common', 'appdata'))
。
答案 1 :(得分:0)
首先提出一些问题(因为我无法发表评论): 1. 您是否使用了多个版本的 python3(例如有一次我通过 python3.8
安装了一个软件包但我使用的是 python3.9
所以当我试图导入它我得到了一个 modulenotfounderror
但后来我解决了它)如果是,那么你安装了多少版本
2. 库的系统路径是什么(如果你不想分享路径,可以分享一个示例路径)?
3. 在自定义库所在的文件夹中是否有 __init__.py
文件(例如:module.py 的路径:C:users\random\documents\modulecontainer\module.py {{ 1}} 应该在 modulecontainer 中,如果 module.py 是你的自定义模块)?
此问题有 2 种不同的解决方案,具体取决于您的问题是什么(这 2 种解决方案与上述问题相关联):
解决方案 1:确保模块位于包含名为 __init__.py
的空文件的文件夹中,如果没有,则创建 __init__.py
并将其放入包含模块的文件夹中(s) 使用 IDE,在您的情况下使用 VScode。这可确保 Python 搜索文件夹内的文件以找到与您要导入的文件名匹配的文件。
解决方案2:如果您通过不同版本的python安装了不在标准库中的模块,而该版本不是您当前使用的python版本(例如,通过python3.8安装randommodule但尝试导入它通过python3.9)然后您可以复制或移动其他版本的python中的包(例如,将randommodule从python38内的site-packages移动到python39内的site-packages)
希望,这有帮助!如果您还有其他要添加到此问题的内容,可以评论或编辑该问题。
答案 2 :(得分:0)
实际上最好的方法是使用 .pylintrc 文件。
在我的例子中,我将 .pylintrc 文件添加到我的项目的根目录中,并配置了一个钩子,如这里评论的那样:https://stackoverflow.com/a/3065082