Это - вопрос о новичке Python:
У меня есть следующая структура каталогов:
test
-- test_file.py
a
-- b
-- module.py
где test
, a
и b
папки. Оба test
и a
находятся на том же уровне.
module.py назвали класс shape
, и я хочу инстанцировать экземпляра его в test_file.py. Как я могу сделать так?
Я попробовал:
from a.b import module
но я добрался:
ImportError: No module named a.b
Вам нужен относительный импорт, например:
из модуля импорта ..ab
Проблема в том, что он не работает если вы вызываете test_file.py в качестве основного модуля. Как указано здесь :
Обратите внимание, что как явный, так и неявный относительный импорт основаны на имени текущего модуля. Поскольку имя главного модуля всегда « main », модули, предназначенные для использования в качестве основного модуля приложения Python, всегда должны использовать абсолютный импорт.
Итак, если вы хотите вызвать test_file.py
в качестве основного модуля, вам следует подумать об изменении структуры ваших модулей и использовании абсолютного импорта, иначе просто используйте относительный импорт сверху.
Каталог A
должен быть пакетом Отказ Добавьте __ __ init __. PY
файл, чтобы сделать его пакетом, который является шагом вверх из простого каталога.
Справочник B
также должен быть подпакасим A
. Добавьте __ init __. Py
файл.
Тест каталога
, вероятно, также должен быть пакет. Трудно сказать, если это необходимо или нет. Обычно это хорошая идея для каждого каталога модулей Python, чтобы быть официальным пакетом.
Для того, чтобы импорт
пакет должен быть включен SYSPPATH
; Это построено из переменной среды Pythonpath
. По умолчанию установленные пакеты сайта и текущий рабочий каталог (эффективно) являются только два места, где можно найти пакет.
Это означает, что должен быть установлен
A , либо должен быть установлен, либо ваш текущий рабочий каталог также должен быть пакетом один уровень выше A
.
Или, необходимо установить вашу вариабельную среду Pythonpath
, чтобы включить A
.
http://docs.cython.org/tutorial/modules.html#the-module-search-path
http://docs.cython.org/using/cmdline.html#envvar-pythonpath
Также http://docssython.org/library/site.html Для полной информации о том, как Sys.Path
построен.
См. SD CLONDER , инструмент для обнаружения кода копирования-файла-редактирования в нескольких файлах. Он обнаруживает точные копии, копии, которые были переформатированы, а близко-мисс-копии с разными идентификаторами, литералами и даже разными Seqeunces of thowurent.
ClonceR обрабатывает много языков, включая Java (1,4,1,5,1,6) и C #, особенно до C # 4.0. Вы можете увидеть отчеты об обнаружении образца клона на веб-сайте, также включая один для C #.
-121--3176619-Первое, что нужно сделать, было бы быстро просмотреть официальных документов по этому поводу .
Чтобы сделать каталог пакет, вы должны добавить __ init __. Py
файл. Это означает, что у вас будет такой файл в A
и B
каталогов. Тогда вы можете напрямую сделать
import a.b.module
, но вам придется обратиться к нему как ABModule
, который утомительно, чтобы вы могли использовать форму как
, как в формате импорта
import a.b.module as mod #shorter name
и обратитесь к нему по моду
.
Тогда вы можете создать создание вещей внутри MOD
, используя обычные конвенции, такие как Mod.Shape ()
.
Есть несколько других тонкостей. Пожалуйста, пройдите документы для деталей.