Pydev "Undefine variable from import" использует pygame на Ubunutu, но не на Windows

В двух словах

В Ubuntu 11.10 для библиотеки pygame pydev сообщает "неопределенные переменные из импорта". На Windows 7 все нормально. На обеих платформах код работает правильно.

Это та же ошибка, что и в этой темекуче других). Удаление и повторное добавление моего переводчика ничего не изменило. Я также попытался включить pygame как принудительную встроенную библиотеку, но это ничего не изменило (я проверил, что pygame был в системе PYTHONPATH).

Configs

И в 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 Pro с пакетом обновления 1
  • Pygame 1.9.2pre от lfd.uci.edu. MSI создал несколько папок.pyd и.py в папке site-packages/pygame.

Я понимаю, что статический анализ не может идти внутрь.so файлов в Ubuntu. Я также понимаю, что Python - это динамический язык. Следовательно, у pydev есть ограничения, присущие статическому анализу. Но pydev в Windows 7 удается связать классы внутри файлов.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-битная Lenovo T410, и я установил все для 64-битной.

1 ответ

Решение

Я только что проверил это здесь, в Ubuntu, и, похоже, он работает правильно для меня... Можете ли вы опубликовать следующее, чтобы попытаться исправить это там:

1 Удалите "pygame" из ваших принудительных встроенных функций, если вы добавили его (он не нужен для этого конкретного случая использования... глядя на его структуру, кажется, что статический анализатор должен быть в состоянии справиться с ним должным образом, и Файлы.so в pygame будут автоматически обрабатываться оболочкой, поэтому нет необходимости явно иметь с этим дело).

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 и связывается с ней через сокеты, поэтому, возможно, что-то там блокирует).

Другие вопросы по тегам