Как мне импортировать файлы в Python? Я хочу импортировать:
файл (например, file.py)
папка
файл создается динамически во время выполнения на основе ввода пользователем
одна определенная часть файла (например, отдельная функция)
Переведено автоматически
Ответ 1
Существует множество способов импортировать файл python, у каждого из которых есть свои плюсы и минусы.
Не выбирайте поспешно первую стратегию импорта, которая подходит именно вам, иначе вам придется переписывать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.
Я начну с объяснения самого простого примера № 1, затем перейду к наиболее профессиональному и надежному примеру № 7
Пример 1, Импортируйте модуль python с помощью интерпретатора python:
Вы импортировали fox через интерпретатор python, вызвали функцию python what_does_the_fox_say() изнутри fox.py.
Пример 2, используйте execfile или (exec в Python 3) в скрипте для выполнения другого файла python на месте:
Поместите это в /home/el/foo2/mylib.py:
defmoobar(): print("hi")
Поместите это в /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py") moobar()
запустите файл:
el@apollo:/home/el/foo$ python main.py hi
Функция moobar была импортирована из mylib.py и стала доступной в main.py
Пример 3, использование from ... импорт ... функциональность:
Поместите это в /home/el/foo3/chekov.py:
defquestion(): print"where are the nuclear wessels?"
Поместите это в /home/el/foo3/main.py:
from chekov import question question()
Запустите это следующим образом:
el@apollo:/home/el/foo3$ python main.py where are the nuclear wessels?
Если вы определили другие функции в chekov.py, они будут недоступны, если вы import *
Пример 4, Импорт riaa.py если файл находится в другом расположении, чем то, откуда он был импортирован
Поместите это в /home/el/foo4/stuff/riaa.py:
defwatchout(): print"computers are transforming into a noose and a yoke for humans"
Поместите это в /home/el/foo4/main.py:
import sys import os sys.path.append(os.path.abspath("/home/el/foo4/stuff")) from riaa import * watchout()
Запустите это:
el@apollo:/home/el/foo4$ python main.py computers are transforming into a noose and a yoke for humans
Который импортирует все, что находится во внешнем файле, из другого каталога.
Пример 5, использование os.system("python yourfile.py")
import os os.system("python yourfile.py")
Пример 6, импортируйте ваш файл с помощью piggybacking в python startuphook:
Обновление: Раньше этот пример работал как для python2, так и для 3, но теперь работает только для python2. python3 избавился от этого набора функций пользовательского startuphook, потому что им злоупотребляли малоквалифицированные разработчики библиотек python, используя его для невежливого внедрения своего кода в глобальное пространство имен перед всеми пользовательскими программами. Если вы хотите, чтобы это работало для python3, вам придется проявить больше изобретательности. Если я расскажу вам, как это сделать, разработчики python отключат и этот набор функций, так что вы предоставлены сами себе.
Поместите этот код в свой домашний каталог в ~/.pythonrc.py
classsecretclass: defsecretmessage(cls, myarg): return myarg + " is if.. up in the sky, the sky" secretmessage = classmethod( secretmessage )
defskycake(cls): return"cookie and sky pie people can't go up and " skycake = classmethod( skycake )
Вставьте этот код в свой файл main.py (может быть где угодно):
import user msg = "The only way skycake tates good" msg = user.secretclass.secretmessage(msg) msg += user.secretclass.skycake() print(msg + " have the sky pie! SKYCAKE!")
Запустите его, вы должны получить это:
$ python main.py The only way skycake tates good isif.. up in the sky, the skycookie and sky pie people can't go up and have the sky pie! SKYCAKE!
Если вы получаете сообщение об ошибке здесь: ModuleNotFoundError: No module named 'user' то это означает, что вы используете python3, startuphooks по умолчанию там отключены.