【问题标题】:Pydev "Undefine variable from import" using pygame on Ubunutu but not WindowsPydev“来自导入的未定义变量”在 Ubuntu 但不是 Windows 上使用 pygame
【发布时间】:2012-01-24 18:52:19
【问题描述】:

简而言之

在 Ubuntu 11.10 上,对于 pygame 库,pydev 报告“来自导入的未定义变量”。在 Windows 7 上,一切都很好。在两个平台上,代码都能正常工作。

这与this thread(和bunchofothers)的错误相同。删除和重新添加我的解释器并没有改变任何东西。我还尝试将 pygame 作为强制内置库包含在内,但它没有改变任何东西(我检查了 pygame 是否在系统 PYTHONPATH 中)。

配置

在 Ubuntu 和 Windows 上,我使用的是 Eclipse Indigo 和 Python 3.2。

在 Ubuntu 上,我正在使用:

  • Ubuntu 11.10
  • Pygame 1.9.2pre 编译自 pygame Hg 存储库。构建和安装后,site-packages/pygame 文件夹包含一堆 .so 和 .py 文件。

在 Windows7 上:

  • Windows 7 专业版 SP1
  • Pygame 1.9.2pre 来自lfd.uci.edu。 MSI 在 site-packages/pygame 文件夹中创建了一堆 .pyd 和 .py。

我了解静态分析无法进入 Ubuntu 上的 .so 文件。我也明白 Python 是一种动态语言。因此 pydev 具有静态分析固有的局限性。但是 Windows 7 上的 pydev 设法链接 .pyd 文件中的类,这些文件是动态库。为什么?我怎样才能让它在 Ubuntu 上运行?

提示?

import pygame
from pygame.locals import *

在 Ubuntu 中使用上面的代码,我可以 ctrl-click(或 f3)到 pygame 包,但不能到 pygame.locals。在 Windows 上,我可以同时访问两者。

import pygame
import pygame.locals
from pygame.locals import *

现在我可以访问 pygame.locals。我想这有助于 pydev 弄清楚“期望”什么,因为 locals.py 实际上存在于 site-packages/pygame 文件夹中。但我不想改变我所有的代码只是为了适应 pydev。

无论如何,下面的行在 Ubuntu 上仍然会引发“导入时未定义的变量”,但在 Windows 上不会。

except pygame.error:

PS:如果有帮助,我有一个 64 位的联想 T410,并安装了 64 位的所有东西。

【问题讨论】:

    标签: eclipse windows-7 ubuntu pydev pygame


    【解决方案1】:

    我刚刚在 Ubuntu 上对其进行了测试,它似乎对我来说可以正常工作...您可以发布以下内容来帮助您修复它吗:

    1。如果您添加了“pygame”,请从您的强制内置函数中删除它(这个特定用例不需要它......通过查看它的结构,静态分析器似乎应该能够正确处理它,并且pygame 中的 .so 文件将由 shell 自动处理,因此无需显式处理)。

    2.有一个程序:

    import sys
    print '\n'.join(sorted(sys.path))
    import pygame.locals
    print pygame
    print pygame.locals
    

    当你从 PyDev 启动它时它给你的输出是什么? (我有兴趣知道 pygame 的完整路径,它是否会在运行时抛出 ImportError 以及你的完整 PYTHONPATH)

    3。您的错误日志中有错误吗? (PyDev 能够自省 .so 文件,但它会启动一个单独的 python shell 并通过套接字与它通信,因此,有可能是某些东西阻塞了那里)。

    【讨论】:

    • 感谢您的帮助 :-) 我创建了一个新的 pydev 项目,其中包含您的程序。我从强制内置插件中删除了 pygame。你的程序输出:/home/tho/.eclipse/org.eclipse.platform_3.7.0_155965261/plugins/org.python.pydev.debug_2.3.0.2011121518/pysrc /home/tho/workspace/test/src /home/tho/workspace/test/src /usr/local/lib/python3.2 /usr/local/lib/python3.2/lib-dynload /usr/local/lib/python3.2/plat-linux3 /usr/local/lib/python3.2/site-packages /usr/local/lib/python32.zip .......
    • ... 那么import pygame.locals这一行的错误:File "/usr/local/lib/python3.2/site-packages/pygame/__init__.py", line 99, in <module> from pygame.base import * ImportError: libSDL-1.2.so.0: cannot open shared object file: No such file or directory
    • 错误日志中的错误:就 PyDev 而言,请参阅截图链接:first partthe rest
    • 看来错误出在你的pygame编译中...(因为导入失败)有什么原因你没有直接从ubuntu得到那个吗? (即:删除您的编译并执行 sudo apt-get install python-pygame 之类的操作。注意:我现在不在 Linux 上,因此,包名称可能有点不同,尤其是对于 python 3 时)。
    • 啊,如果这个问题不处理 pydev 而是编译 pygame,我很抱歉浪费了您的时间:/ apt-get 只有 python2.6 的 pygame(Ubuntu11 上的默认 python .11)。我按照pygame.org 的说明进行操作。我将重新安装 pygame,仔细检查编译错误(虽然我安装它时没有任何问题),然后回复你。
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2012-11-30
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多