Я следующая структурой папок для проекта Python 3, где vehicle.py
является основным скриптом и папка stats
рассматривается как пакет, содержащие несколько модулей:Импорт функций непосредственно из Python 3 модуля
cars
модуль определяет следующие функции:
def neon():
print('Neon')
print('mpg = 32')
def mustang():
print('Mustang')
print('mpg = 27')
Использование Python 3, я могу получить доступ к функции в каждом модуле внутри vehicle.py
, как Ф.О. llows:
import stats.cars as c
c.mustang()
Однако, я хотел бы получить доступ к функциям, определенным в каждом модуле непосредственно, но я получаю сообщение об ошибке при этом:
import stats as st
st.mustang()
# AttributeError: 'module' object has no attribute 'mustang'
Я также попытался размещения __init__.py
файл в stats
папка со следующим кодом:
from cars import *
from trucks import *
, но я все еще получаю ошибку:
import stats as st
st.mustang()
# ImportError: No module named 'cars'
Я пытаюсь использовать тот же подход, как NumPy, такие как:
import numpy as np
np.arange(10)
# prints array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Как я могу создать пакет, как NumPy в Python 3 для доступа к функциям непосредственно в модулях?
люди говорят '__init __ py' является обязательным для создания пакета не слышал о [неявным. пакеты пространства имен] (https://www.python.org/dev/peps/pep-0420/); вот почему ваша текущая структура проекта не вызывает ошибки в 'import stats.cars как c'. – user2357112
@ user2357112 Я знаю о неявном пространстве имен в Python 3, но он по-прежнему не заботится об ошибке, которую я вижу. – wigging