2013-08-28 3 views
0

Когда у меня есть следующие пакеты:импорта система питона - импорт пакетов

src 
    /__main__.py 
    /dir1 
     /__init__.py 
     /main_code1.py 
     /service.py 
     /config.py 
    /dir2 
     /__init__.py 
     /maincode2.py 
    /dir3 
     /__init__.py 
     /maincode3.py 

В чем разница между помощью следующего оператора в файле __main__.py

import dir1 

&

from dir1 import * 

&

from dir1 import main_code1 

Второй вопрос: Как импортировать maincode3.py (присутствует в dir3) в скрипт maincode.py, присутствующий в каталоге dir1? Я ищу путь без изменения списка sys.path.

ответ

2
import dir1 

Импорт dir1's __init__.py. Вы можете получить доступ к тому, что есть, используя dir1.my_var_from_dir1_init. Вы не можете получить доступ к модулям, только то, что находится на dir1's __init__.

from dir1 import * 

Импортирует модули, указанные на __all__ переменной, определенной на dir1-х __init__.py. Если такой переменной нет, тогда она импортирует все модули dir1. Вы можете получить к ним доступ напрямую, например main_code1.myvar.

from dir1 import maincode 

Если предположить, что это опечатка, и вы на самом деле есть maincode модуль или класс, он импортирует maincode модуль/класс от dir1. Вы можете получить к нему доступ, как указано выше.

Обратите внимание, что каждый параметр импортирует d121 __init__.py, неявно или явно. Если вы импортируете модули на __init__.py, то с помощью import dir1 вы сможете использовать dir1.module.


Чтобы импортировать dir3-х maincode3 в maincode.py, просто используйте from dir3 import maincode3. Просто будьте осторожны с циклическим импортом, который приведет к ошибке импорта. Вы также можете посмотреть на relative imports.

+0

, когда я использую (из dir1 import maincode1) и __init__.py содержат строку типа: (импорт службы, config), Является ли конфигурация модулей и служба импортирована или нет? – tabebqena

+0

Почему бы вам не попробовать?Они импортированы, но я думаю, вы не можете получить к ним доступ напрямую. – Alex

1
  • import dir1 будет импортировать файл dir1/__ init__.py.
  • from dir1 import *: все модули внутри dir1 будут импортированы. Войдите в «main_code1» без использования «dir». до.
  • from dir1 import main_code1 будет импортировать только модуль main_code1.

Если __main__.py файл импортирует все другие модули, то вы можете получить доступ к dir3.maincode3.py из dir1.main_code1.py просто делать что-то вроде:

import dir3.maincode3

Смежные вопросы