python: из модулей импорт abc.py не работает - PullRequest
4 голосов
/ 15 декабря 2011

Я недавно перешел с python 2.7 на python 3.2

с учетом следующей структуры папок:

~/my_program
~/my_program/modules

где * my_program * - корень приложения, содержащий основной скрипт с именем main.py

  *my_program/modules* is used to store all additional classes and subscripts

в python2.x Мне удалось импортировать любой файловый «модуль» так же, как я импортирую стандартные модули

from modules import abc.py 

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

File "/my_program/modules/__init__.py" line 1
import abc, def

ImportError: No module named abc

Пожалуйста, сообщите

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Это хороший пример, который вы используете, потому что «abc» фактически является модулем в стандартной библиотеке.Так что, на самом деле, если вы в Python 3 делаете import abc, это будет работать нормально, но вы получите стандартный библиотечный модуль.

В Python 2, если у вас был локальный модуль с именем abc.py, этоimport abc вместо этого импортирует локальный модуль.Это означает, что вы не можете импортировать модуль из стандартной библиотеки.

В Python 3 это было изменено, и теперь вам нужно использовать полное имя, в вашем случае, вероятно, from modules import abc.

0 голосов
/ 19 ноября 2013

Где вы храните созданный вами модуль?Когда я создаю модуль, я делаю следующее:

Создайте папку в папке lib \ sitepackages в вашей папке python, например: myModules. Сохраните в этой папке пустой файл python с именем init.py.Файл не должен содержать синтаксис.Позже вы можете установить требования к модулю в этом файле, если хотите.Сохраните ваш модуль в эту папку, например: myGamesModule.py В режиме ожидания (или в зависимости от того, какую Python-среду вы используете), наберите:

из myModules, импортируйте myGamesModule или из myModules, импортируйте myGamesModule как myGmMod

Это должно импортироватьваш модуль, а затем вы можете вызвать классы и т. д. ex myGmMod.Player ()

Я уверен, что это правильно, так как я только что сделал это, и все было в порядке.

Я нашелчто иногда, если я создаю пустой текстовый файл в папке модуля и переименовываю его в init .py, это вызывало у меня проблемы раньше.Обычно я просто открываю IDLE и сохраняю файл init .py оттуда в папку моего модуля, а затем использую любую среду IDE, которую я использую (возвышенный), для создания и сохранения остальных файлов.

Кроме того, по какой-то причине в текстовом поле запрещено использовать подчеркивания, которые я использую в этом тексте, поэтому там, где вы видите init.py, оно должно быть ( underscoreunderscore * init * underscoreunderscore .pyбез звездочки

...