2013-08-31 1 views
1

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

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

+ myproject 
    - __init__.py 
    - a.py 
    - b.py 
    + package1 
     - c.py 
     - __init__.py 
    + package2 
     - d.py 
     - e.py 
     - __init__.py 

Если я в файле a.py, он не позволит мне сделать импорт, как это, например:

from myproject.b import foo 
import myproject.b 

То же самое происходит для любого файла. Они все компилировать просто отлично, если я уйду от «MyProject» из оператора импорта, как это:

from b import foo 
import b 

Так же, как на рисунке, у меня определенно есть верхний уровень __init__.py, и как папка MyProject и ее parent находятся на пути Python. Папка myproject также является исходной папкой для проекта.

Мне нужен полный оператор импорта, потому что места, где я развертываю этот код, не будут иметь папку myproject на своем пути. Некоторые другие проекты, которые, похоже, настроены одинаково, не имеют этой проблемы, и я пробовал обычную чистку/перезапуск.

Любая идея относительно того, что здесь происходит?

Спасибо!

+1

Если места вы deply код, чтобы сделать не иметь папку MyProject на их пути, ' import myproject.b' не удастся. – BrenBarn

+0

Вы действительно получаете ошибку компиляции? Python не заботится о том, существуют ли во время компиляции модули, ссылки на которые вы ссылаетесь, и даже не компилируете свой код до тех пор, пока вы его не запустите. Если это 'ImportError', это не ошибка компиляции. – user2357112

+0

Да, я неправильно. Это 'ИмпортError'. – piyo

ответ

1

Вы пробовали относительный импорт (from .b import foo, from . import b)? Я не понимаю, почему абсолютный импорт (включая «myproject») не работает в вашем случае, но между тем относительный импорт должен по-прежнему работать.

+0

Дословный импорт невозможен. – piyo

+0

Почему? Они были с 2,5 года, и PEP8 считает их приемлемыми. – antony

+0

Люди в моем офисе им не нравятся. – piyo

1

Итак, после небольшого поворота выяснилось, что PyDev не позволит мне запустить оператор импорта с пакетом, который сам находится на пути Python. Если я удалю обозначение исходной папки из моей папки проекта, импорт будет работать нормально, но тогда, конечно, я потеряю некоторые функции PyDev.

Итак, моя новая проблема немного отличается, поэтому я отправил другой вопрос здесь:

https://stackoverflow.com/questions/18613944/how-should-i-structure-my-pydev-git-project