Jak zaimportować inne pliki Pythona?

Jak zaimportować inne pliki w Pythonie?

  1. jak dokładnie mogę zaimportować konkretny plik Pythona, taki jak import file.py?
  2. Jak zaimportować folder zamiast określonego pliku?
  3. chcę dynamicznie ładować plik Pythona w czasie wykonywania, w oparciu o użytkownika wejście.
  4. chcę wiedzieć, jak załadować tylko jedną konkretną część z pliku.

Na przykład w main.py mam:

from extra import * 

Chociaż to daje mi wszystkie definicje w extra.py, Kiedy może wszystko, czego chcę jest jedną definicją:

def gap():
    print
    print

Co dodać do import, aby po prostu dostać gap z extra.py?

Author: Lii, 2010-02-28

13 answers

importlib jest ostatnim dodatkiem w Pythonie do programowego importowania modułu. It just a wrapper around __import__ Zobacz https://docs.python.org/3/library/importlib.html#module-importlib

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

Aktualizacja: odpowiedź poniżej jest nieaktualna . Użyj nowszej alternatywy powyżej.

  1. Po prostu import file bez rozszerzenia'. py'.

  2. Możesz oznaczyć folder jako pakiet, dodając pusty plik o nazwie __init__.py.

  3. Możesz użyj funkcji __import__. Przyjmuje nazwę modułu jako ciąg znaków. (Ponownie: Nazwa modułu bez rozszerzenia'. py'.)

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

    Wpisz help(__import__) aby uzyskać więcej szczegółów.

 305
Author: Radian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 14:06:51

Istnieje wiele sposobów importowania pliku Pythona, wszystkie z ich zaletami i wadami.

Nie wybieraj pośpiesznie pierwszej strategii importu, która działa dla ciebie, albo będziesz musiał przepisać kod później, gdy okaże się, że nie spełnia Twoich potrzeb.

Zacznę od wyjaśnienia najprostszego przykładu # 1, a następnie przejdę do najbardziej profesjonalnego i solidnego przykładu # 7]}

Przykład 1, Importuj moduł Pythona za pomocą Pythona interpreter:

  1. Włóż to /home/el/foo/fox.py:

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. Dostać się do interpretera Pythona:

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

    Zaimportowałeś Foxa przez interpreter Pythona, wywołałeś funkcję Pythona what_does_the_fox_say() z wewnątrz fox.py.

Przykład 2, Użyj execfile lub (exec w Pythonie 3 ) w skrypcie do wykonywania innego pliku Pythona w miejscu:

  1. Włóż to do /home/el/foo2/mylib.py:

    def moobar():
      print("hi")
    
  2. Włóż to /home/el/foo2/main.py:

    execfile("/home/el/foo2/mylib.py")
    moobar()
    
  3. Uruchom plik:

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

    Funkcja moobar została zaimportowana z mylib.py i udostępniane w main.py

Przykład 3, Użyj z ... import ... funkcjonalność:

  1. Włóż to /home/el/foo3/chekov.py:

    def question():
      print "where are the nuclear wessels?"
    
  2. Włóż to /home/el/foo3/main.py:

    from chekov import question
    question()
    
  3. Uruchom go tak:

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

    Jeśli zdefiniowałeś inne funkcje w chekov.py, nie będą dostępne, chyba że ty import *

Przykład 4, Import riaa.py jeśli plik znajduje się w innej lokalizacji niż importowany

  1. Włóż to /home/el/foo4/stuff/riaa.py:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
    
  2. Włóż to /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. Uruchom go:

    el@apollo:/home/el/foo4$ python main.py 
    computers are transforming into a noose and a yoke for humans
    

    Że importuje wszystko z pliku obcego z inny katalog.

Przykład 5, użyj os.system("python yourfile.py")

import os
os.system("python yourfile.py")

Przykład 6, zaimportuj plik poprzez piggybacking Python startuphook:

Zobacz: https://docs.python.org/3/library/user.html

Umieść ten kod w katalogu domowym w ~/.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 )

Umieść ten kod w swoim main.py (może być wszędzie):

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!")

Uruchom go:

$ 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!

Kredyt na ten jist idzie do: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Wyślij swoje łodzie.

Przykład 7, Najbardziej niezawodny: Importuj pliki w Pythonie za pomocą polecenia bare import:

  1. Utwórz nowy katalog /home/el/foo5/
  2. Utwórz nowy katalog /home/el/foo5/herp
  3. Stwórz pusty plik o nazwie __init__.py pod herp:

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
    
  4. Tworzenie nowego katalogu / home / el/foo5/herp / derp

  5. Pod derp, utwórz kolejny plik __init__.py:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. Under / home / el / foo5/herp / derp make a new file called yolo.py Put this in there:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
    
  7. The moment Of truth, Make the new file /home/el/foo5/main.py, put this in there;

    from herp.derp.yolo import skycake
    skycake()
    
  8. Uruchom go:

    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk 
    of men. SKYCAKE!!
    

    Pusty plik __init__.py komunikuje się z interpreterem Pythona, że deweloper zamierza ten katalog być importowalnym pakietem.

Jeśli chcesz zobaczyć mój post na temat jak dołącz wszystkie pliki. py do katalogu zobacz tutaj: https://stackoverflow.com/a/20753073/445131

Bonus protip

Niezależnie od tego, czy używasz Mac, Linux czy Windows, musisz używać bezczynnego edytora Pythona , jak opisano tutaj. Odblokuje twój świat Pythona. http://www.youtube.com/watch?v=DkW5CSZ_VII

 716
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 03:02:58

Aby zaimportować określony plik Pythona w "runtime" o znanej nazwie:

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
 35
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-13 12:44:04

Nie masz wielu złożonych metod importowania pliku Pythona z jednego folderu do drugiego. Wystarczy utworzyć __init__.py plik aby zadeklarować ten folder jest pakietem Pythona, a następnie przejdź do pliku hosta, do którego chcesz zaimportować po prostu wpisz

from root.parent.folder.file import variable, class, whatever

 24
Author: Fatih Karatana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 23:02:49

Import doc ..

Pliki __init__.py są wymagane, aby Python traktował katalogi jako zawierające Pakiety, ma to na celu uniemożliwienie katalogom o wspólnej nazwie, takim jak string, niezamierzonego ukrywania poprawnych modułów, które pojawią się później na ścieżce wyszukiwania modułów.

__init__.py może być tylko pustym plikiem, ale może również wykonać kod inicjalizacyjny dla pakietu lub ustawić zmienną __all__.

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module
 10
Author: Sanyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-19 09:17:10
from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

I

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

Oto dwa proste sposoby, które do tej pory zrozumiałam i upewnij się, że "file.py" plik, który chcesz zaimportować jako bibliotekę, jest obecny tylko w bieżącym katalogu.

 7
Author: Devendra Bhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 19:49:18

Najlepszym sposobem importowania plików .py jest __init__.py. najprostszą rzeczą do zrobienia jest utworzenie pustego pliku o nazwie __init__.py w tym samym katalogu, który your.py plik znajduje się.

Ten post autorstwa Mike 'a Grouchy' ego jest doskonałym wyjaśnieniem __init__.py i jego wykorzystania do tworzenia, importowania i konfigurowania pakietów Pythona.

 4
Author: supreme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 16:14:53

Jak zaimportować to zaimportować plik i użyć skrótu jego nazwy.

import DoStuff.py as DS
DS.main()

Nie zapomnij że importowany plik musi mieć nazwę z rozszerzeniem. py

 3
Author: Luke359,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-09 09:01:49

Chciałbym dodać tę notatkę, której nie znam nigdzie indziej; wewnątrz modułu / pakietu, podczas ładowania z plików, Nazwa modułu / pakietu musi być poprzedzona mymodule. Wyobraź sobiemymodule taki układ:

/main.py
/mymodule
    /__init__.py
    /somefile.py
    /otherstuff.py

Podczas ładowania somefile.py/otherstuff.py od __init__.py zawartość powinna wyglądać następująco:

from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc
 1
Author: Svend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-28 17:19:05

Wystarczy zaimportować plik Pythona do innego pliku Pythona

Powiedzmy, że mam helper.py Plik Pythona, który ma funkcję wyświetlania, jak,

def display():
    print("I'm working sundar gsv")

Teraz w app.py , możesz użyć funkcji wyświetlania,

import helper
helper.display()

Wyjście,

I'm working sundar gsv

Uwaga: nie ma potrzeby określania rozszerzenia. py.

 0
Author: Sundar Gsv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 13:27:38

Może to zabrzmieć szalenie, ale możesz po prostu utworzyć dowiązanie symboliczne do pliku, który chcesz zaimportować, jeśli tylko tworzysz do niego skrypt wrappera.

 0
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-29 02:20:57

Istnieje wiele sposobów, jak wspomniano powyżej, ale uważam, że ja po prostu chcę zaimportować zawartość pliku, i nie chcę pisać linii i linii i importować Inne Moduły. Tak więc, wymyśliłem sposób, aby uzyskać zawartość pliku, nawet ze składnią kropki (file.property) W przeciwieństwie do scalania importowanego pliku z Twoim.
Po pierwsze, oto mój plik, który zaimportuję, data.py

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


Uwaga: możesz użyć rozszerzenia .txt zamiast tego.
W mainfile.py zacznij od otwarcia i pobrania zawartości.

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

Teraz masz zawartość jako łańcuch znaków, ale próba dostępu do data.testString spowoduje błąd, ponieważ data jest instancją klasy str i nawet jeśli ma ona właściwość testString, nie zrobi tego, czego oczekiwałeś.
Następnie utwórz klasę. Na przykład (kalambur zamierzony), ImportedFile

    class ImportedFile:

I umieścić to w nim (z odpowiednim wcięciem):

    exec(data)


I na koniec re-assign data tak:

    data=ImportedFile()

I to wszystko! Po prostu dostęp jak dla każdego-inny moduł, wpisując print(data.testString) zostanie wydrukowany na konsoli A string literal to import and test with.
Jeśli jednak chcesz odpowiednika from mod import * po prostu porzuć przypisanie klasy, instancji i usuń wgniecenie exec.

Mam nadzieję, że to pomoże:)
- Benji

 0
Author: Benj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 08:30:55

Możesz również to zrobić: from filename import something

Przykład: from client import Client Zauważ, że nie potrzebujesz rozszerzenia .py .pyw .pyui.

 0
Author: Lucas Soares,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 10:01:21