У меня есть следующая структура папок для проекта Python 3, где vehicle.py
является основным сценарием, а папка stats
рассматривается как пакет, содержащий несколько модулей:
Модуль cars
определяет следующие функции:
def neon():
print('Neon')
print('mpg = 32')
def mustang():
print('Mustang')
print('mpg = 27')
Используя Python 3, я могу получить доступ к функциям в каждом модуле из vehicle.py
следующим образом:
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 для доступа к функциям непосредственно в модулях?
4 ответа
Поместите файл __init__.py
в папку stats
(как уже говорили другие) и поместите в него:
from .cars import neon, mustang
from .trucks import truck_a, truck_b
Не так аккуратно, но проще было бы использовать подстановочный знак *
:
from .cars import *
from .trucks import *
Таким образом, скрипт __init__.py
выполняет некоторый импорт для вас в собственное пространство имен.
Теперь вы можете использовать функции / классы из модуля neon
/ mustang
сразу после импорта stats
:
import stats as st
st.mustang()
Вы пробовали что-то вроде {{Х0}}
Вам также может понадобиться пустой __init__.py
файл в этом каталоге.
host:~ lcerezo$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from boto.s3.connection import S3Connection as mys3
>>>
Вам нужно создать файл __ init __. Py в папке статистики.
Файлы __ init __. Py необходимы для того, чтобы Python рассматривал каталоги как пакеты. Документация
Добавьте пустой __init__.py
файл в вашу папку статистики, и волшебство произойдет.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.