Как импортировать другие файлы Python?
как импортировать другие файлы в Python?
- как именно я могу импортировать конкретный файл python, например
import file.py? - как я могу импортировать папку вместо конкретного файла?
- Я хочу, чтобы загрузить файл Python динамически во время выполнения, на основе пользователя
вход. - Я хочу знать, как загрузить только одну конкретную часть из файла.
например,main.py Я:
from extra import *
хотя это дает мне все определения в extra.py, когда возможно все, что я хочу, это единственное определение:
def gap():
print
print
что я могу добавить к import заявление, чтобы просто сделать gap С extra.py?
13 ответов:
importlibявляется недавним добавлением в Python для программного импорта модуля. Это просто обертка вокруг__import__См.https://docs.python.org/3/library/importlib.html#module-importlibimport importlib moduleName = input('Enter module name:') importlib.import_module(moduleName)
обновление: Ответ ниже устарел. Используйте более позднюю альтернативу выше.
просто
import fileбез расширения'. py'.вы можете пометить папку как пакет, добавив пустой файл с именем
__init__.py.можно использовать . Он принимает имя модуля в виде строки. (Опять же: имя модуля без расширения'. py'.)
pmName = input('Enter module name:') pm = __import__(pmName) print(dir(pm))тип
help(__import__)для более подробной информации.
есть много способов импортировать файл python, все со своими плюсами и минусами.
не просто поспешно выбрать первую стратегию импорта, которая работает для вас, иначе вам придется переписать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.
я начну объяснять самый простой пример #1, затем я перейду к самому профессиональному и надежному примеру #7
Пример 1, импорт модуля python с python переводчик:
положите это в /home/el/foo/fox.py:
def what_does_the_fox_say(): print("vixens cry")войдите в интерпретатор python:
el@apollo:/home/el/foo$ python Python 2.7.3 (default, Sep 26 2013, 20:03:06) >>> import fox >>> fox.what_does_the_fox_say() vixens cry >>>вы импортировали fox через интерпретатор python, вызвали функцию python
what_does_the_fox_say()изнутри fox.py.Пример 2, Используйте
execfileили (execв Python 3) в скрипте для выполнения другого файла python в место:
положите это в /home/el/foo2/mylib.py:
def moobar(): 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:
def question(): 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:
def watchout(): 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:
посмотреть: https://docs.python.org/3/library/user.html
поместите этот код в свой домашний каталог в
~/.pythonrc.pyclass secretclass: def secretmessage(cls, myarg): return myarg + " is if.. up in the sky, the sky" secretmessage = classmethod( secretmessage ) def skycake(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 is if.. up in the sky, the skycookie and sky pie people can't go up and have the sky pie! SKYCAKE!кредит для этого jist идет к: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py отправляйте свои лодки вверх.
Пример 7, Большинство Надежный: импорт файлов в python с помощью команды bare import:
- создать новую папку
/home/el/foo5/- создать новую папку
/home/el/foo5/herpсоздать пустой файл с именем
__init__.pyпри герпесной:el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.pyсоздайте новый каталог / home/el/foo5/herp / derp
под сумасшедший, сделать еще один
__init__.pyfile:el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.pyпод /home / el/foo5/herp / derp создайте новый файл с именем
yolo.pyположите это туда:def skycake(): print "SkyCake evolves to stay just beyond the cognitive reach of " + "the bulk of men. SKYCAKE!!"момент истины, сделайте новый файл
/home/el/foo5/main.pyи тамfrom herp.derp.yolo import skycake skycake()запустить его:
el@apollo:/home/el/foo5$ python main.py SkyCake evolves to stay just beyond the cognitive reach of the bulk of men. SKYCAKE!!пустой
__init__.pyfile сообщает интерпретатору python, что разработчик намеревается сделать этот каталог импортируемым пакетом.если вы хотите увидеть мой пост о том, как включать Все. py файлы в каталоге смотрите здесь:https://stackoverflow.com/a/20753073/445131
бонус protip
если вы используете Mac, Linux или Windows, вы должны использовать простой редактор python как описано здесь. Это откроет ваш мир python. http://www.youtube.com/watch?v=DkW5CSZ_VII
чтобы импортировать определенный файл Python во время выполнения с известным именем:
import os import sys...
scriptpath = "../Test/MyModule.py" # Add the directory containing your module to the Python path (wants absolute paths) sys.path.append(os.path.abspath(scriptpath)) # Do the import import MyModule
у вас нет много сложных методов для импорта файла python из одной папки в другую. Просто создайте __init__.py файл для объявления этой папки является пакетом python, а затем перейдите к файлу хоста, где вы хотите импортировать просто введите
from root.parent.folder.file import variable, class, whatever
The
__init__.pyфайлы необходимы для того, чтобы Python рассматривал каталоги как содержащие пакеты, это делается для предотвращения непреднамеренного скрытия допустимых модулей, которые возникают позже в пути поиска модуля, в каталогах с общим именем, например string.
__init__.pyможет быть просто пустой файл, но он также может выполнять код инициализации пакета или установить__all__переменной.mydir/spam/__init__.py mydir/spam/module.py import spam.module or from spam import module
from file import function_name ######## Importing specific function function_name() ######## Calling functionи
import file ######## Importing whole package file.function1_name() ######## Calling function file.function2_name() ######## Calling functionвот два простых способа, которые я понял к настоящему времени и убедитесь, что ваш "file.py" файл, который вы хотите импортировать в качестве библиотеки, присутствует только в вашем текущем каталоге.
лучший способ импортировать файлы .py-через
__init__.py. самое простое, что нужно сделать, это создать пустой файл с именем__init__.pyв том же каталоге, что your.py файл находится.этой post Майк ворчливый является отличным объяснением
__init__.pyи его использование для создания, импорта и настройки пакетов python.
Как я импортирую-это импортировать файл и использовать стенографию его имени.
import DoStuff.py as DS DS.main()не забудьте ваш импорта файл ДОЛЖНО БЫТЬ С расширением .py
Я хотел бы добавить это примечание Я не очень ясно в другом месте; внутри модуля / пакета, при загрузке из файлов, имя модуля / пакета должно быть с префиксом
mymodule. Представьте себеmymoduleбыть макет, как это:/main.py /mymodule /__init__.py /somefile.py /otherstuff.pyпри загрузке
somefile.py/otherstuff.pyС__init__.pyсодержимое должно выглядеть так:from mymodule.somefile import somefunc from mymodule.otherstuff import otherfunc
просто импортировать файл python в другой файл python
допустим, у меня есть helper.py python файл, который имеет функцию отображения, как,
def display(): print("I'm working sundar gsv")Теперь в app.py, Вы можете использовать функцию отображения,
import helper helper.display()выход
I'm working sundar gsvПримечание: нет необходимости указывать расширение .py.
Это может показаться сумасшедшим, но вы можете просто создать символическую ссылку на файл, который вы хотите импортировать, если вы просто создаете скрипт-враппер к нему.
есть много способов, как указано выше, но я считаю, что я просто хочу импортировать содержимое файла, и не хочу писать строки и строки и импортировать другое модули. Итак, я придумал способ получить содержимое файла, даже с точечным синтаксисом (
file.property) в отличие от слияния импортированного файла с вашим.
Прежде всего, вот мой файл, который я буду импортировать,data.pytestString= "A string literal to import and test with"
Примечание.: вы могли бы использовать.txtрасширение вместо этого.
Inmainfile.py, начните с открытия и получать содержание.#!usr/bin/env python3 Data=open('data.txt','r+').read()теперь у вас есть содержимое в виде строки, но пытается получить доступ
data.testStringвызовет ошибку, так какdataэкземплярstrкласс, и даже если он имеет свойствоtestStringон не будет делать то, что вы ожидали.
Затем создайте класс. Например (каламбур),ImportedFileclass ImportedFile:и положить это в него (с соответствующий отступ):
exec(data)
И, наконец, повторно назначитьdataвот так:data=ImportedFile()и это все! Просто доступ, как вы бы для любого другого модуля, введя
print(data.testString)выведет на консольA string literal to import and test with.
Если, однако, вы хотите, что эквивалентноfrom mod import *просто отбросьте класс, назначение экземпляра и удалитеexec.надеюсь, что это помогает:)
- Бенджи
вы также можете сделать это:
from filename import somethingпример:
from client import ClientОбратите внимание, что вам не нужно
Comments