У меня есть файл с именем tester.py
, расположенный на /project
.
/project
имеет подкаталог lib
с именем файла BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
Я хочу импортировать BoxTime
из tester
. Я пробовал это:
import lib.BoxTime
В результате чего:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Есть идеи как импортировать BoxTime
из подкаталога?
РЕДАКТИРОВАТЬ
Проблема __init__.py
была, но не забывайте ссылаться на BoxTime
нее lib.BoxTime
или использовать:
import lib.BoxTime as BT
...
BT.bt_function()
python
module
subdirectory
python-import
Адам Матан
источник
источник
__init__
файлов (но если вы хотите, просто зарегистрируйте автозагрузку хука! В этом разница между хакером и хакером ).import sys, os; sys.path.insert(0, os.path.abspath('..')); from sibling_package.hacks import HackyHackHack
lib
.lib\__init__.py
.В
lib\BoxTime.py
, напишите функцию,foo()
как это:В коде вашего клиента в каталоге выше
lib
напишите:Запустите ваш клиентский код. Ты получишь:
Намного позже - в Linux это будет выглядеть так:
источник
lib
Вы можете попробовать вставить его в
sys.path
:источник
cd /data
,python ../project/tester.py
. Тогда это не сработает.Я записываю это, потому что каждый, кажется, предлагает вам создать
lib
каталог.Вам не нужно называть свой подкаталог
lib
. Вы можете назвать егоanything
при условии, что вы положили__init__.py
в него.Вы можете сделать это, введя следующую команду в оболочке Linux:
Итак, теперь у вас есть эта структура:
Тогда вы можете импортировать
mylib
вmain.py
это:Вы также можете импортировать функции и классы следующим образом:
Любая переменная функция или класс, который вы размещаете внутри,
__init__.py
также могут быть доступны:Или вот так:
источник
utils\__init__.py
иutils\myfile.py
. (Утилиты содержат оба файла). Вот как я пытаюсь импортироватьfrom utils.myfile import myMethod
. Но я получаюModuleNotFoundError: No module named 'utils'
. Что может быть не так? PS: я используюDjango
и пытаюсь импортировать, вviews.py
котором находится на том же уровне, что иutils
папкаPYTHONPATH=. python path/to/program.py
Ваш каталог lib содержит
__init__.py
файл?Python использует
__init__.py
для определения, является ли каталог модулем.источник
Попробуй
import .lib.BoxTime
. Для получения дополнительной информации читайте об относительном импорте в PEP 328 .источник
Я делаю это, что в основном охватывает все случаи (убедитесь, что у вас есть
__init__.py
в папке / path / to / your / lib /):Пример: у
вас есть в папке проекта:
У вас есть в другой папке проекта:
Вы хотите использовать
/root/anotherproject/utils.py
и вызывать функцию foo, которая есть в ней.Итак, вы пишете в app.py:
источник
os.path
вы, вероятно, захотите использоватьos.path.join((os.path.dirname(os.path.realpath(__file__)),'..','anotherproject')
вместо жесткого кодирования '/' в конкатенации вашего пути."../anotherproject"
безos.path.dirname()
?dirname(realpath(__file__))
, то при запуске скрипта он вычислит путь относительно вашего текущего рабочего каталога, а не относительно того, где он находится.Создайте пустой файл
__init__.py
в подкаталоге / lib. И добавить в начале основной кодтогда
или лучше
источник
Просто дополнение к этим ответам.
Если вы хотите импортировать все файлы из всех подкаталогов , вы можете добавить это в корень вашего файла.
И тогда вы можете просто импортировать файлы из подкаталогов так, как если бы эти файлы были внутри текущего каталога.
Рабочий пример
Если у меня есть следующий каталог с подкаталогами в моем проекте ...
Я могу поместить следующий код в мой
a.py
файлДругими словами, этот код будет абстрагироваться от того, из какого каталога идет файл.
источник
/project/tester.py
/project/lib/BoxTime.py
создайте пустой файл
__init__.py
вниз по строке, пока не дойдете до файла/project/lib/somefolder/BoxTime.py
#lib
- needs содержит два элемента one,__init__.py
а каталог с именем somefolder#somefolder
содержит два элементаboxtime.py
и__init__.py
источник
попробуй это:
from lib import BoxTime
источник