Как мне импортировать другие файлы в Python?
- Как именно я могу импортировать определенный файл Python, как
import file.py
? - Как я могу импортировать папку вместо определенного файла?
- Я хочу загружать файл Python динамически во время выполнения, основываясь на пользовательском вводе.
- Я хочу знать, как загрузить только одну конкретную часть из файла.
Например, у main.py
меня есть:
from extra import *
Хотя это дает мне все определения extra.py
, когда, возможно, все, что я хочу, это одно определение:
def gap():
print
print
Что мне добавить в import
утверждение, чтобы просто получить gap
от extra.py
?
python
python-import
укротитель
источник
источник
Ответы:
importlib
был добавлен в Python 3 для программного импорта модуля. Это просто обертка вокруг__import__
, посмотрите документы .Примечание:
.py
расширение должно быть удалено изmoduleName
. Функция также определяетpackage
аргумент для относительного импорта.Обновление: ответ ниже устарел . Используйте более свежую альтернативу выше.
Просто
import file
без расширения .py.Вы можете пометить папку как пакет, добавив пустой файл с именем
__init__.py
.Вы можете использовать
__import__
функцию. Он принимает имя модуля в виде строки. (Опять же: имя модуля без расширения .py).Введите
help(__import__)
для более подробной информации.источник
import filename
в файл init .py, вы можете импортировать модуль непосредственно как имя папки.help(__import__)
:Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
import filenamenoext
у меня это отлично работает, с Python 3.4.8.Есть много способов импортировать файл Python, все со своими плюсами и минусами.
Не торопитесь выбирать первую стратегию импорта, которая работает для вас, иначе вам придется переписать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.
Я начну с объяснения самого простого примера № 1, а затем перейду к самому профессиональному и надежному примеру № 7
Пример 1. Импорт модуля python с интерпретатором python:
Поместите это в /home/el/foo/fox.py:
Получить в интерпретатор Python:
Вы импортировали fox через интерпретатор python,
what_does_the_fox_say()
вызвали функцию python из fox.py.Пример 2, используйте
execfile
или (exec
в Python 3 ) в скрипте для выполнения другого файла Python на месте:Поместите это в /home/el/foo2/mylib.py:
Поместите это в /home/el/foo2/main.py:
запустите файл:
Функция moobar была импортирована из mylib.py и сделана доступной в main.py
Пример 3, использование из ... import ... функциональность:
Поместите это в /home/el/foo3/chekov.py:
Поместите это в /home/el/foo3/main.py:
Запустите это так:
Если вы определили другие функции в chekov.py, они не будут доступны, если вы
import *
Пример 4. Импорт riaa.py, если он находится в другом месте файла, из которого он импортирован.
Поместите это в /home/el/foo4/stuff/riaa.py:
Поместите это в /home/el/foo4/main.py:
Запустить его:
Это импортирует все в чужом файле из другого каталога.
Пример 5, использование
os.system("python yourfile.py")
Пример 6, импортируйте ваш файл с помощью контекста python startuphook:
Обновление: этот пример раньше работал как для python2, так и для 3, но теперь работает только для python2. Python3 избавился от этого пользовательского набора функций автозапуска, потому что он использовался авторами библиотек Python с низким уровнем квалификации, использовавшими его для невежливого внедрения кода в глобальное пространство имен перед всеми пользовательскими программами. Если вы хотите, чтобы это работало для python3, вам нужно стать более креативным. Если я скажу вам, как это сделать, разработчики Python также отключат этот набор функций, так что вы сами по себе.
См .: https://docs.python.org/2/library/user.html.
Поместите этот код в свой домашний каталог в
~/.pythonrc.py
Поместите этот код в ваш main.py (может быть где угодно):
Запустите его, вы должны получить это:
Если вы получаете здесь ошибку:
ModuleNotFoundError: No module named 'user'
это означает, что вы используете python3, автозагрузка там отключена по умолчанию.Кредит на этот jist идет по адресу : https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Отправить вместе с вашими пользователями.
Пример 7. Наиболее надежный: импорт файлов в python с помощью простой команды import:
/home/el/foo5/
/home/el/foo5/herp
Создайте пустой файл с именем
__init__.py
herp:Создайте новый каталог / home / el / foo5 / herp / derp
Под сумасшедшим, сделайте другой
__init__.py
файл:В / home / el / foo5 / herp / derp создайте новый файл с именем
yolo.py
Поместите это туда:Момент истины, Создайте новый файл
/home/el/foo5/main.py
, поместите это туда;Запустить его:
Пустой
__init__.py
файл сообщает интерпретатору python, что разработчик намеревается, что этот каталог будет импортируемым пакетом.Если вы хотите увидеть мой пост о том, как включить ВСЕ файлы .py в каталог, см. Здесь: https://stackoverflow.com/a/20753073/445131.
источник
__import__(py_file_name)
. В любом случае, потрясающий гидЧтобы импортировать определенный файл Python во время выполнения с известным именем:
...
источник
У вас нет много сложных методов для импорта файла Python из одной папки в другую. Просто создайте файл __init__.py, чтобы объявить, что эта папка является пакетом python, а затем перейдите в файл хоста, куда вы хотите импортировать, просто введите
from root.parent.folder.file import variable, class, whatever
источник
Импорт документов .. - Ссылка для справки
Эти
__init__.py
файлы необходимы , чтобы Python лечить каталоги как содержащие пакеты, это делается , чтобы предотвратить каталоги с общим названием, например, строки, непреднамеренное скрывая действительные модули , которые происходят позже на пути поиска модулей.__init__.py
может быть просто пустым файлом, но он также может выполнить код инициализации для пакета или установить__all__
переменную.источник
Первый случай: вы хотите импортировать файл
A.py
в файлB.py
, эти два файла находятся в одной папке, например так:Вы можете сделать это в файле
B.py
:или
или
Тогда вы сможете использовать все функции файла
A.py
в файлеB.py
Второй случай: вы хотите импортировать файл
folder/A.py
в файлB.py
, эти два файла не находятся в одной папке, например так:Вы можете сделать это в файле B:
или
или
Тогда вы сможете использовать все функции файла
A.py
в файлеB.py
Резюме: в первом случае файл
A.py
- это модуль, который вы импортируете в файлB.py
, вы использовали синтаксисimport module_name
. Во втором случае,folder
это пакет, содержащий модульA.py
, вы использовали синтаксисimport package_name.module_name
.Для получения дополнительной информации о пакетах и модулях, обратитесь к этой ссылке .
источник
from folder_a.script import *
Script.py находится в папке.import sys
иsys.path.append("..")
в начало файла. Согласно этому: stackoverflow.com/a/48341902/6057480 . Протестировано, работает отлично, после этого вы сможете импортировать py-файл в родительский каталог и все еще в состоянии импортировать py-файлы в том же каталоге и подкаталогах.а также
Вот два простых способа, которые я уже понял, и убедитесь, что ваш файл file.py, который вы хотите импортировать как библиотеку, присутствует только в вашем текущем каталоге.
источник
Если определенная функция находится в файле
x.py
:В файле, куда вы импортируете функцию, напишите это:
Это полезно, если вы не хотите импортировать все функции в файл.
источник
лучший способ импортировать .py файлы - это
__init__.py
. самое простое, что нужно сделать, это создать пустой файл с именем__init__.py
в том же каталоге, в котором находится ваш файл .py.Этот пост Майка Гроучи - отличное объяснение
__init__.py
и его использование для создания, импорта и настройки пакетов Python.источник
Как я импортирую, так это импортирую файл и использую сокращение его имени.
Не забывайте, что ваш импортируемый файл ДОЛЖЕН БЫТЬ назван с расширением .py
источник
import DoStuff.py as DS
пытался бы импортироватьpy
изDoStuff
?Я хотел бы добавить эту заметку, я не очень четко в другом месте; внутри модуля / пакета при загрузке из файлов перед именем модуля / пакета должен стоять префикс
mymodule
. Представьте,mymodule
что вы так устроены:При загрузке
somefile.py
/otherstuff.py
из__init__.py
содержимого должно выглядеть так:источник
Если модуль, который вы хотите импортировать, не находится в подкаталоге , попробуйте следующее и запустите
app.py
из самого глубокого общего родительского каталога:Структура каталогов:
В
app.py
, добавьте путь клиента к sys.path:Необязательно (если вы загружаете, например, конфиги) (Inspect представляется наиболее надежным для моих случаев использования)
Запустить
Это решение работает для меня в Cli, а также PyCharm.
источник
Есть несколько способов включить ваш скрипт на python с именем abc.py
Если ваш скрипт на Python обновляется и вы не хотите загружать - используйте эти операторы для автоматического обновления. Бонус :)
источник
Просто для импорта файла Python в другой файл Python
скажем, у меня есть файл python helper.py, который имеет функцию отображения, как,
Теперь в app.py вы можете использовать функцию отображения,
Выход,
I'm working sundar gsv
ПРИМЕЧАНИЕ. Нет необходимости указывать расширение .py.
источник
Это может показаться странным, но вы можете просто создать символическую ссылку на файл, который вы хотите импортировать, если вы просто создаете для него скрипт-обертку.
источник
Вы также можете сделать это:
from filename import something
пример:
from client import Client
обратите внимание, что вам не нужно.py .pyw .pyui
расширение.источник
Это то, как я сделал для вызова функции из файла Python, что позволяет мне вызывать любые функции.
источник
from mypath import Path
сPath = callfunc("/folder/to/mypath.py", "Path")
. Спасибо @ Xiao-FengLiЕсть много способов, как указано выше, но я обнаружил, что я просто хочу импортировать содержимое файла и не хочу писать строки и строки и импортировать другие модули. Итак, я нашел способ получить содержимое файла, даже с точечным синтаксисом (
file.property
), а не объединять импортированный файл с вашим.Прежде всего, вот мой файл, который я импортирую,
data.py
Примечание.
.txt
Вместо этого вы можете использовать расширение.В
mainfile.py
, начнут с открытием и получением содержимого.Теперь у вас есть содержимое в виде строки, но попытка доступа
data.testString
вызовет ошибку, какdata
и экземплярstr
класса, и даже если у него есть свойство,testString
оно не будет делать то, что вы ожидали.Далее создайте класс. Например (каламбур предназначен),
ImportedFile
И поместите это в это (с соответствующим отступом):
И, наконец, переназначить
data
так:И это все! Просто получите доступ, как если бы вы работали с любым другим модулем, набрав,
print(data.testString)
вы напечатаете на консолиA string literal to import and test with
.Однако, если вы хотите получить эквивалент,
from mod import *
просто отбросьте класс, присвойте экземпляр и отмените определениеexec
.Надеюсь, это поможет :)
-Бенджи
источник
Одна очень неизвестная особенность Python - это возможность импортировать
zip
файлы:Файл
__init__.py
пакета содержит следующее:Мы можем написать другой скрипт, который может импортировать пакет из zip-архива. Нужно только добавить zip-файл в sys.path.
источник