【问题标题】:PyDev - unresolved import only on IDE, still runningPyDev - 仅在 IDE 上未解决的导入,仍在运行
【发布时间】:2017-11-09 08:43:26
【问题描述】:

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

未解决的导入:sqlite3

来自导入的未定义变量: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')  

导入错误发生在...导入。第二行。发生这种情况是因为我亲自将 /usr/lib/python2.7/sqlite3 添加到 pydev 的 python 解释器的 pythonpath 中。如果我删除它,错误是在“sqlite3.connect”。我想 connect 没有在那个目录上定义。没找到。

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

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

从peewee导入* 数据库 = MySQLDatabase('test', **{'host': 'localhost', '密码':'rt','用户':'rt','charset':'utf8mb4'})

类未知字段(对象): def init(self, *_, **__): 通过

类BaseModel(模型): 元类: 数据库 = 数据库

类 Tbitem(BaseModel): 源 = 整数字段() name = CharField(null=True)

在我的 main.py 上

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

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

来自导入的未定义变量:get

我可以继续工作,什么都没有发生,或者我可以回到 vim 或 vscode(慢速调试器),但我更喜欢使用它,因为我习惯了 eclipse 并且我喜欢 pydev 的想法。应该是吗?我确实在 shell 上检查了 pythonpath,它看起来一样,除了一个不再存在的目录。

我在 pydev 的常见问题解答中读到它不喜欢软链接。我应该删除所有软链接吗? peewee 没有软链接和 sqlite3 我什至不知道它在哪里结束。

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

【问题讨论】:

    标签: python pydev


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        你好,

        和你一样,我只在 IDE 上遇到了一个未解决的导入问题,我找到了解决方法。

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

        pip3 install netifaces
        

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

        • netifaces-0.10.6.dist-info
        • netifaces.cpython-36m-darwin.so

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

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

        我创建了符号链接“netifaces.so”来获取我在 Python 2.7.13 解释器的“site-packages”文件夹中找到的相同文件

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

        创建后,一切运行良好:导入问题在 Pydev 编辑器中消失。

        问题:错误在哪里?

        1. 在 pip3 完成的模块安装中:安装的“.so”文件没有模块的名称?
        2. 在 pyDev 的模块发现功能中,它不处理已安装的“.so”文件的“平台扩展”名称

        【讨论】:

        • 我还没有时间测试它,但我想我会尝试“force builtins”。对于所有给我类似问题的图书馆
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        相关资源
        最近更新 更多