Как импортировать другие файлы Python?

как импортировать другие файлы в Python?

  1. как именно я могу импортировать конкретный файл python, например import file.py?
  2. как импортировать папку вместо определенного файла?
  3. Я хочу динамически загружать файл Python во время выполнения на основе пользователя вход.
  4. Я хочу знать, как загрузить только одну конкретную часть из файла.

например,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)

обновление: ответ ниже устарел. Используйте более позднюю альтернативу выше.

  1. просто import file без '.py ' extension.

  2. вы можете пометить папку как пакет, добавив пустой файл с именем __init__.py.

  3. можно использовать . Он принимает имя модуля в виде строки. (Опять же: имя модуля без '.py ' extension.)

    pmName = input('Enter module name:')
    pm = __import__(pmName)
    print(dir(pm))
    

    тип help(__import__) для получения более подробной информации.


есть много способов импортировать файл python, все со своими плюсами и минусами.

не просто поспешно выберите первую стратегию импорта, которая работает для вас, иначе вам придется переписать кодовую базу позже, когда вы обнаружите, что она не отвечает вашим потребностям.

я начну объяснять самый простой пример #1, а затем перейду к самому профессиональному и надежному примеру #7

Пример 1, импорт модуля python с python переводчик:

  1. положите это в /home/el/foo/fox.py:

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. войдите в интерпретатор 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 в место:

  1. положите это в /home/el/foo2/mylib.py:

    def moobar():
      print("hi")
    
  2. положите это в /home/el/foo2/main.py:

    execfile("/home/el/foo2/mylib.py")
    moobar()
    
  3. запустить файл:

    el@apollo:/home/el/foo$ python main.py
    hi
    

    функции moobar был импортирован из mylib.py и main.py

Пример 3, Используйте from ... импорт... функциональность:

  1. поставить это в /home/el/foo3/chekov.py:

    def question():
      print "where are the nuclear wessels?"
    
  2. положите это в /home/el/foo3/main.py:

    from chekov import question
    question()
    
  3. запустите его так:

    el@apollo:/home/el/foo3$ python main.py 
    where are the nuclear wessels?
    

    если вы определили другие функции в chekov.py, они не будут доступны, если вы import *

Пример 4, импорт riaa.py если он находится в другом месте файла, откуда он импортируется

  1. поставить это в /home/el/foo4/stuff/riaa.py:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
    
  2. положите это в /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. запустить его:

    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:

  1. создать новую папку /home/el/foo5/
  2. создать новую папку /home/el/foo5/herp
  3. создать пустой файл с именем __init__.py при герпесной:

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
    
  4. создайте новый каталог / home/el/foo5/herp / derp

  5. под derp, сделать другой :

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. под /главная/el/foo5/herp / derp сделать новый файл под названием yolo.py положите это туда:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
    
  7. момент истины, сделайте новый файл /home/el/foo5/main.py и там

    from herp.derp.yolo import skycake
    skycake()
    
  8. запустить его:

    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


импорт doc ..

на __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 Обратите внимание, что вам не нужно