Как импортировать другие файлы 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-importlib
import importlib
moduleName = input('Enter module name:')
importlib.import_module(moduleName)
обновление: ответ ниже устарел. Используйте более позднюю альтернативу выше.
просто
import file
без '.py ' extension.вы можете пометить папку как пакет, добавив пустой файл с именем
__init__.py
.-
можно использовать . Он принимает имя модуля в виде строки. (Опять же: имя модуля без '.py ' extension.)
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.py
class 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, Большинство Robust: импорт файлов в 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
-
под derp, сделать другой :
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.py
-
под /главная/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__.py
файл сообщает интерпретатору 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
на __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 файл находится.
этой в должности Майк ворчливый является отличным объяснением __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.py
testString= "A string literal to import and test with"
Примечание.: вы можете использовать .txt
расширение вместо этого.
на mainfile.py
, начните с открытия и получать содержание.
#!usr/bin/env python3
Data=open('data.txt','r+').read()
теперь у вас есть содержимое в виде строки, но пытается получить доступ data.testString
вызовет ошибку, как data
экземпляр str
класс, и даже если он имеет свойство testString
он не будет делать то, что вы ожидали.
Затем создайте класс. Например (каламбур), ImportedFile
class ImportedFile:
и поместите это в него (с соответствующий отступ):
exec(data)
И, наконец, re-assign data
вот так:
data=ImportedFile()
и это все! Просто доступ, как и для любого другого модуля, набрав print(data.testString)
будет печатать на консоли A string literal to import and test with
.
Если, однако, вы хотите, что эквивалентно from mod import *
просто отбросьте класс, назначение экземпляра и удалите exec
.
надеюсь, что это помогает:)
- Бенджи!--25-->
вы также можете сделать это: from filename import something
пример: from client import Client
Обратите внимание, что вам не нужно