У меня есть каталог, в котором хранятся все файлы .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Я хочу использовать классы из user.py и dir.py в main.py .
Как я могу импортировать эти классы Python в main.py ?
Кроме того, как я могу импортировать класс, User
если user.py находится в подкаталоге?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Бен Чен
источник
источник
Ответы:
Python 2
Создайте пустой файл с именем
__init__.py
в том же каталоге, что и файлы. Это будет означать для Python, что «можно импортировать из этого каталога».Тогда просто делай ...
То же самое верно, если файлы находятся в подкаталоге - также поместите его
__init__.py
в подкаталог, а затем используйте обычные операторы импорта с точечной нотацией. Для каждого уровня каталога, вы должны добавить к пути импорта.Итак, если каталог был назван «классы», то вы бы сделали это:
Python 3
То же, что и предыдущий, но префикс имени модуля с,
.
если не используется подкаталог:источник
__init__.py
он не пустой, то все, что находится внутри,__init__.py
будет доступно при импорте пакета (а вещи, не импортированные в него__init__.py
, вообще не будут доступны).__init__.py
нужен файл вообще? Если я положу все три файла в один и тот же каталог и запустлюmain.py
его, он сможет работатьimport
с двумя другими модулями без него. Что мне не хватает?__init__.py
возможности импорта других модулей в том же каталоге. В частности,import
другие модули в том же каталоге, что и__init__.py
сам файл, который работал в Python 2.7.8, потерпели неудачу в Python 3.4.1. Чтобы исправить это, я должен был префикс каждого из них с именем подкаталога и точки (то естьimport module
должен был быть изменен наimport subdirectory.module
). К счастью, это все еще работало в Python 2.7.8 после этого.Я только что узнал (благодаря комментарию Мартино ), что для того, чтобы импортировать классы из файлов в одном каталоге, вы теперь должны написать в Python 3:
источник
ValueError: Attempted relative import in non-package
но ошибка исчезнет, когда яfrom user import User
В вашем
main.py
:где
Class
имя класса, который вы хотите импортировать.Если вы хотите вызвать метод
Class
, вы можете вызвать его с помощью:Class.method
Обратите внимание, что
__init__.py
в том же каталоге должен быть пустой файл.источник
__init__.py
.Вы можете импортировать модуль и получить доступ через его имя, если не хотите смешивать функции и классы с вашими.
или вы можете импортировать функции и классы в свой код
вы можете использовать wildchar *, чтобы импортировать все в этом модуле в ваш код
источник
Не в Python3,
__init__.py
это больше не нужно . Если текущим каталогом консоли является каталог, в котором находится скрипт Python, все работает нормальноТем не менее, это не будет работать, если вызывается из другого каталога, который не содержит
user.py
.В этом случае используйте
Это работает, даже если вы хотите импортировать весь файл, а не просто класс оттуда.
источник
import user
подчеркнут красным); изменился на относительный import (from . import user
) и линтер больше не помечал его.Чтобы было проще понять:
Шаг 1: давайте перейдем в один каталог, где все будет включено
Шаг 2: теперь давайте создадим файл class1.py с именем класса Class1 с некоторым кодом
Шаг 3: теперь давайте создадим файл class2.py с именем класса Class2 с некоторым кодом
Шаг 4: теперь давайте создадим один main.py, который будет выполняться один раз, чтобы использовать Class1 и Class2 из 2 разных файлов.
Шаг 5: Запустите программу
Выход будет
источник
Python 3
То же самое
directory
.импортировать файл:
log.py
класс импорта:
SampleApp()
.или
каталог есть
basic
.импортировать в файл:
log.py
.класс импорта:
SampleApp()
.источник
источник
Если user.py и dir.py не включают классы, то
не работает. Затем вы должны импортировать как
источник
Я не уверен, почему это работает, но с помощью сборки Pycharm
from file_in_same_dir import class_name
IDE жаловалась на это, но, похоже, все еще работало. Я использую Python 3.7
источник
Просто слишком кратко, создайте файл
__init__.py
в каталоге классов и затем импортируйте его в свой скрипт, как показано ниже (импортировать все регистры)Импортировать только выбранные классы
источник
импортировать из той же директории
для импорта из подкаталога каталог должен содержать
файл, кроме вас, то файлы
из каталога импортировать ваш_файл
источник
python3
использование
а также
вот так
источник