PyDev в Eclipse не распознает db.add_column с юга - PullRequest
13 голосов
/ 22 января 2011

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

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

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

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

Какие-нибудь советы о том, как сделать интерпретатор Eclipse python более счастливым?

Ответы [ 3 ]

19 голосов
/ 25 июля 2011

Или, если вы не хотите путать изменение южных исходных файлов или ретуширование всех ваших файлов миграции, вы можете рассматривать специфические южные методы как глобальные для анализа кода 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
4 голосов
/ 11 марта 2011

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

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

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

3 голосов
/ 02 мая 2011

Вот обходной путь, если вы хотите редактировать 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]
...