Jak zaimportować inne pliki Pythona?
Jak zaimportować inne pliki w Pythonie?
- jak dokładnie mogę zaimportować konkretny plik Pythona, taki jak
import file.py
? - Jak zaimportować folder zamiast określonego pliku?
- chcę dynamicznie ładować plik Pythona w czasie wykonywania, w oparciu o użytkownika wejście.
- 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
?
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.
Po prostu
import file
bez rozszerzenia'. py'.Możesz oznaczyć folder jako pakiet, dodając pusty plik o nazwie
__init__.py
.-
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.
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:
-
Włóż to /home/el/foo/fox.py:
def what_does_the_fox_say(): print("vixens cry")
-
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:
-
Włóż to do /home/el/foo2/mylib.py:
def moobar(): print("hi")
-
Włóż to /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py") moobar()
-
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ść:
-
Włóż to /home/el/foo3/chekov.py:
def question(): print "where are the nuclear wessels?"
-
Włóż to /home/el/foo3/main.py:
from chekov import question question()
-
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
-
Włóż to /home/el/foo4/stuff/riaa.py:
def watchout(): print "computers are transforming into a noose and a yoke for humans"
-
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()
-
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:
- Utwórz nowy katalog
/home/el/foo5/
- Utwórz nowy katalog
/home/el/foo5/herp
-
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
-
Tworzenie nowego katalogu / home / el/foo5/herp / derp
-
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
-
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!!"
-
The moment Of truth, Make the new file
/home/el/foo5/main.py
, put this in there;from herp.derp.yolo import skycake skycake()
-
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
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
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
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
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
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.
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.
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
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
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.
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.
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
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
.
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