Ответ 1
Из Python: импортируйте содержащий пакет:
Импортирование __init__
работает нормально.
import __init__
class Good(object):
def __init__(self):
print hello1.A
У меня есть пакет hello1, который содержит good.py модуль.
hello1
├── __init__.py
└── good.py
Модуль init имеет переменную A = 1
, и мне нужно получить доступ к переменной hello1.A в файле good.py.
import hello1
class Good(object):
def __init__(self):
print hello1.A
if __name__ == "__main__":
g = Good()
Проблема в том, что когда я выполняю python script, я получил ошибку ImportError: 'No module named hello1'
. Я могу добавить import sys; sys.path.append("..")
в первую строку good.py
для быстрого исправления.
Однако good.py находится в пакете hello1, где находится __init__.py, поэтому я задаюсь вопросом, есть ли способ доступа к переменным в __init__.py из модулей в том же пакете.
Из Python: импортируйте содержащий пакет:
Импортирование __init__
работает нормально.
import __init__
class Good(object):
def __init__(self):
print hello1.A
Если я не ошибаюсь, вы хотите сделать что-то вроде:
python hello1/good.py
Так как good.py
является подмодулем пакета, вы не должны его запускать; имейте в виду, что при его непосредственном выполнении он не считается частью пакета hello1
, который предотвращает относительный импорт, а текущий каталог - тот, который содержит файл, поэтому hello1
не может быть найден, если он не является 't часть PYTHONPATH
. Вместо этого вы можете запустить его с помощью переключателя -m
интерпретатора python:
-m mod
: запустите библиотечный модуль как script (завершает список опций)
Мне лично не нравится использовать опции интерпретатора для выполнения файла python. Я бы предпочел иметь независимый файл запуска good.py
, который импортирует модуль hello1.good
и использует его для выполнения того, что он должен делать.
Если вам не нравится sys.path.append(...), вы можете запустить script как
python -m hello1.good
в каталоге, содержащем "hello1" -каталог, или используйте переменную среды PYTHONPATH вместо sys.path.
Вы должны явно импортировать константы, которые хотите использовать.
Предпочтительно иметь все ваши константы в файле конфигурации (например, config.py)), а затем, если вы хотите, чтобы они были в пространстве имен пакетов, импортируйте их.
init.py файл:
from package.config import *
более ясно, что путь