PyDev в Eclipse не распознает db.add_column с Юга

Я только что установил Юг (0.7.3, python-2.6) и успешно завершил учебник, используя интерпретатор python. Это означает, что я могу создать модель и перенести ее без каких-либо ошибок, поэтому, кажется, Юг отлично работает в оболочке python. Я использовал sqlite3 db для учебника.

Однако, когда я открываю свой проект в Eclipse, Eclipse не распознает функции, связанные с db в папках переноса: 0001_initial.py и 0002_auto__add_field_knight_dances_whenever_able.py файлы. Я получаю конкретные ошибки (переменная Undefined из импорта: add_column, create_table, delete_column, delete_table, send_create_signal)

До установки на юг Eclipse отлично работает для создания приложений django. Я указал интерпретатор PyDev в южную папку по сайтам-пакетам (C:\python26\Lib\site-packages\south-0.7.3-py2.6.egg) (Другие библиотеки там, такие как Django и django-picklefield работают хорошо.)

Я запустил простой script из проекта eclipse и из оболочки python, и оба из них имеют одинаковый sys.path

Любые советы по получению переводчика Python Eclipse более счастливыми?

Ответы

Ответ 1

Одно (далеко не идеальное) решение состоит в том, чтобы поместить #@PydevCodeAnalysisIgnore во все ваши миграции. Если у вас есть только несколько, вы можете сделать это вручную. У меня были кучи, поэтому я запустил следующую команду оболочки, которая добавит комментарий в качестве второй строки каждого файла:

find . | grep '^.\/[a-z]*\/migrations\/.*\.py$' | xargs -I FILE sed -i '
1 a\
#@PydevCodeAnalysisIgnore
' FILE 

(Примечание. Вероятно, вы должны запустить find . | grep '^.\/[a-z]*\/migrations\/.*\.py$', чтобы увидеть, какие файлы sed будут изменены, перед запуском всей команды. Вы также можете запустить целую команду без флага -i, чтобы просмотреть сами изменения.)

Ответ 2

Или, если вы не хотите путать с изменением южных исходных файлов или ретушировать все ваши файлы миграции, вы можете рассматривать южные специфические методы как глобальные переменные в анализе кода pydev. Вы можете изменить это в:

Preferences > PyDev > Editor > Code Analysis > Undefined

Мой список исключений:

_,tr,create_table,send_create_signal,delete_table,add_column,delete_column,alter_column,create_unique,create_index,delete_index,delete_unique,shorten_name,rename_column,execute

Ответ 3

Здесь обходной путь, если вы хотите отредактировать south/db/__init__.py:

--- db/__init__.py.original 2010-12-02 03:00:26.000000000 +1300
+++ db/__init__.py  2011-05-02 14:07:19.353636710 +1200
@@ -72,5 +72,9 @@
     )
     sys.exit(1)

-# Finally, to make old migrations work, keep 'db' around as the default database
+# Finally, to make old migrations work, keep 'db' around as the default
+# database. We're setting it explicitly to the generic operations first to
+# avoid pydev errors.
+from south.db import generic
+db = generic.DatabaseOperations(DEFAULT_DB_ALIAS)
 db = dbs[DEFAULT_DB_ALIAS]