PyDev - 仅在 IDE 上未解决的导入问题,仍然 运行

PyDev - unresolved import only on IDE, still running

我想了解 PyDev 不喜欢什么。我在 Ubuntu 下,PyDev 似乎看不到像 bash 那样的库。 我有两个库 sqlite3 和 peewee 的问题。如果我 运行 我的程序放在 shell 上,一切都很好;如果我在新安装的 PyDev 中打开它,我会看到一些带有下划线的指令

Unresolved import: sqlite3

Undefined variable from import: get

第一个错误来自以下代码:

from pprint import pprint
import sqlite3
from bs4 import BeautifulSoup
import codecs
from database import Tbrecipe
from datetime import datetime
import logging

def main():
    logger = logging.getLogger('peewee')
    logger.setLevel(logging.DEBUG)
    logger.addHandler(logging.StreamHandler())
    CONN = sqlite3.connect('ent.db')  

导入错误发生在..导入。第二个 line.This 发生是因为我个人将 /usr/lib/python2.7/sqlite3 添加到 pydev 的 python 解释器的 python 路径中。如果我删除它,错误在 "sqlite3.connect"。我想 connect 没有在该目录上定义。我没找到。

Peewee 还有其他问题。我为我的数据库 table 创建了一个对象 class。一切都很好,直到我尝试使用从 peewee 继承的一些方法。

我的 database.py 看起来像这样:

来自 peewee 导入 * 数据库 = MySQLDatabase('test', **{'host': 'localhost', 'password': 'rt', 'user': 'rt','charset':'utf8mb4'})

class 未知字段(对象): def init(self, *_, **__): pass

class 基础模型(型号): class元: 数据库=数据库

class Tbitem(基础模型): 源=整数字段() 名称 = CharField(null=True)

我的 main.py

...
from database import Tbitem
item = Tbitem.get(Tbitem.id==id_item)

"get" 和 "Tbitem.id" 都用红色下划线标出了错误

Undefined variable from import: get

我可以在没有任何反应的情况下继续工作,或者我可以返回到 vim 或 vscode(慢速调试器),但我更喜欢使用它,因为我已经习惯了 eclipse我喜欢 pydev 的想法。我该怎么办?我确实检查了 shell 上的 pythonpath,它看起来一样,只是目录不再存在。

我在 pydev 的 FAQ 上看到它不喜欢软链接。我应该删除所有软链接吗? peewee 不是软链接和 sqlite3 我什至不知道它在哪里完成。

谁有类似的问题和解决方案?我确实阅读了这里关于 SO 的大部分问题,但它们对我不起作用。

你好,

像你一样,我只在 IDE 上有一个未解决的导入,我找到了一个解决方法。

我使用适当的命令安装了 "netifaces":

pip3 install netifaces

安装后,我在文件夹“/usr/local/lib/python3.6/site-packages”中得到了两个条目(ref. Mac OS + homebrew)。

  • netifaces-0.10.6.dist-信息
  • netifaces.cpython-36m-darwin.so

此时,我在 PyDev 编辑器中遇到了一个未解决的导入问题,但是当我使用 Pydev 启动配置和相同的解释器启动它时,我的应用程序 运行 运行良好。

注意:我还导入了使用 pip3 安装的其他模块,它们的导入没有产生问题。

我创建了符号 link "netifaces.so" 以获取我在 Python 2.7.13 解释器 "site-packages" 文件夹中找到的相同文件

ln -s  netifaces.cpython-36m-darwin.so  netifaces.so

完成此创建后,所有 运行 都很好:Pydev 编辑器中的导入问题消失了。

问题:哪里出错了?

  1. 在pip3安装的模块中:安装的“.so”文件没有模块名?
  2. 在 pyDev 的模块发现功能中,它不关心安装的“.so”文件的"platform extended"名称

我通过强制构建导致该错误的所有外部库来解决它(在解释器的属性下强制内置) 对于我的库,我删除了所有 .pyc 文件并再次尝试,它成功了。

我在使用 Orange-Bioinformatics 时遇到了同样的问题,代码 运行 没问题,但 PyDev 显示未知导入。

这种情况下的问题是 Orange-Bioinformatics 存档中缺少 __init__.py 文件,pip 下载并安装了这些文件。 PyDev 似乎想要每个模块的命名空间声明,所以我只是在 ~/.local/lib/python3.4/site-packages/orangecontrib/ 中创建了一个文件(在你的 /usr/lib/python2.7/sqlite3/ 中case), 将文件命名为 __init__.py 并保存如下内容:

# namespace stub
__import__("pkg_resources").declare_namespace(__name__)

文件已放入子文件夹orangecontrib/bio/

只需通过 Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter -> Apply 刷新 PyDev 的模块列表。现在对我来说一切正常:-)