Как импортировать другие файлы 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?

589   13  

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'.

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

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

    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, Большинство Надежный: импорт файлов в 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. под сумасшедший, сделать еще один __init__.py file:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. под /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!!"
    
  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 file сообщает интерпретатору 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 ..

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.py

    testString= "A string literal to import and test with"


Примечание.: вы могли бы использовать .txt расширение вместо этого.
In mainfile.py, начните с открытия и получать содержание.

    #!usr/bin/env python3
    Data=open('data.txt','r+').read()

теперь у вас есть содержимое в виде строки, но пытается получить доступ data.testString вызовет ошибку, так как data экземпляр str класс, и даже если он имеет свойство testString он не будет делать то, что вы ожидали.
Затем создайте класс. Например (каламбур), ImportedFile

    class 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

    Ничего не найдено.