Jak zaimportować inne pliki do Pythona?
- Jak dokładnie mogę zaimportować określony plik Pythona
import file.py
? - Jak mogę zaimportować folder zamiast określonego pliku?
- Chcę dynamicznie ładować plik Pythona w czasie wykonywania na podstawie danych wprowadzonych przez użytkownika.
- Chcę wiedzieć, jak załadować tylko jedną określoną część z pliku.
Na przykład w main.py
Mam:
from extra import *
Chociaż daje mi to wszystkie definicje extra.py
, kiedy być może wszystko, czego chcę, to jedna definicja:
def gap():
print
print
Co mogę dodać do import
rachunku po prostu dostać gap
od extra.py
?
python
python-import
Pogromca
źródło
źródło
Odpowiedzi:
importlib
został dodany do Pythona 3, aby programowo zaimportować moduł. To tylko opakowanie__import__
, zobacz dokumenty .Uwaga:
.py
rozszerzenie należy usunąć zmoduleName
. Funkcja definiuje równieżpackage
argument dotyczący importu względnego.Aktualizacja: poniższa odpowiedź jest nieaktualna . Skorzystaj z najnowszej alternatywy powyżej.
Tylko
import file
bez rozszerzenia „.py”.Możesz oznaczyć folder jako pakiet, dodając pusty plik o nazwie
__init__.py
.Możesz użyć tej
__import__
funkcji. Pobiera nazwę modułu jako ciąg. (Ponownie: nazwa modułu bez rozszerzenia „.py”.)Wpisz
help(__import__)
więcej szczegółów.źródło
import filename
do pliku init .py, możesz zaimportować moduł bezpośrednio jako nazwę folderu.help(__import__)
:Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
import filenamenoext
działa dobrze dla mnie w Pythonie 3.4.8.Istnieje wiele sposobów importowania pliku python, wszystkie z ich zaletami i wadami.
Nie tylko pośpiesznie wybieraj pierwszą strategię importu, która Ci odpowiada, bo w przeciwnym razie będziesz musiał przepisać bazę kodu, gdy okaże się, że nie spełnia ona 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, Zaimportuj moduł python z interpreterem python:
Umieść to w /home/el/foo/fox.py:
Wejdź do interpretera python:
Zaimportowałeś lisa za pomocą interpretera python,
what_does_the_fox_say()
wywołałeś funkcję python z fox.py.Przykład 2: Użyj
execfile
lub (exec
w Python 3 ) w skrypcie, aby uruchomić inny plik Pythona w miejscu:Umieść to w /home/el/foo2/mylib.py:
Umieść to w /home/el/foo2/main.py:
uruchom plik:
Funkcja moobar została zaimportowana z mylib.py i udostępniona w main.py
Przykład 3, Użyj z ... importuj ... funkcjonalność:
Umieść to w /home/el/foo3/chekov.py:
Umieść to w /home/el/foo3/main.py:
Uruchom tak:
Jeśli zdefiniujesz inne funkcje w chekov.py, nie będą one dostępne, chyba że Ty
import *
Przykład 4: Zaimportuj plik riaa.py, jeśli znajduje się w innym miejscu pliku niż miejsce, w którym jest importowany
Umieść to w /home/el/foo4/stuff/riaa.py:
Umieść to w /home/el/foo4/main.py:
Uruchom:
To importuje wszystko z obcego pliku z innego katalogu.
Przykład 5, użyj
os.system("python yourfile.py")
Przykład 6: zaimportuj plik za pomocą haka uruchamiania Pythona:
Aktualizacja: Ten przykład działał zarówno dla Python2, jak i 3, ale teraz działa tylko dla Python2. Python3 pozbył się tego zestawu funkcji uruchamiania użytkownika, ponieważ był nadużywany przez słabo wykwalifikowanych twórców bibliotek Pythona, wykorzystując go do nielegalnego wstrzykiwania kodu do globalnej przestrzeni nazw, przed wszystkimi programami zdefiniowanymi przez użytkownika. Jeśli chcesz, żeby to działało w Pythonie 3, będziesz musiał być bardziej kreatywny. Jeśli powiem ci, jak to zrobić, programiści Pythona również wyłączą ten zestaw funkcji, więc jesteś sam.
Zobacz: https://docs.python.org/2/library/user.html
Umieść ten kod w swoim katalogu domowym w
~/.pythonrc.py
Umieść ten kod w pliku main.py (może być w dowolnym miejscu):
Uruchom to, powinieneś dostać to:
Jeśli pojawi się tutaj błąd:
ModuleNotFoundError: No module named 'user'
oznacza to, że używasz Python3, haki startowe są tam domyślnie wyłączone.Kredyt za ten jist idzie do: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Wyślij wzdłuż swoich łodzi.
Przykład 7, najbardziej niezawodny: importuj pliki w pythonie za pomocą zwykłego polecenia importu:
/home/el/foo5/
/home/el/foo5/herp
Utwórz pusty plik o nazwie
__init__.py
herp:Utwórz nowy katalog / home / el / foo5 / herp / derp
W ramach derp utwórz kolejny
__init__.py
plik:Pod / home / el / foo5 / herp / derp utwórz nowy plik o nazwie
yolo.py
Umieść to tutaj:Chwila prawdy: Zrób nowy plik
/home/el/foo5/main.py
, umieść go tam;Uruchom:
Pusty
__init__.py
plik informuje interpreter języka Python, że programista zamierza, aby ten katalog był pakietem do importowania.Jeśli chcesz zobaczyć mój post na temat dołączania WSZYSTKICH plików .py do katalogu, zobacz tutaj: https://stackoverflow.com/a/20753073/445131
źródło
__import__(py_file_name)
. W każdym razie niesamowity przewodnikAby zaimportować określony plik Pythona w „środowisku wykonawczym” o znanej nazwie:
...
źródło
Nie ma wielu skomplikowanych metod importowania pliku Pythona z jednego folderu do drugiego. Po prostu utwórz plik __init__.py , aby zadeklarować, że 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
źródło
Importuj dokument .. - Link w celach informacyjnych
__init__.py
Pliki są wymagane, aby Python traktował katalogi jako zawierające pakiety. Ma to na celu zapobieganie przypadkowemu ukrywaniu prawidłowych modułów pojawiających się później w ścieżce wyszukiwania katalogów o wspólnej nazwie, takich jak łańcuch.__init__.py
może być tylko pustym plikiem, ale może również wykonać kod inicjujący pakiet lub ustawić__all__
zmienną.źródło
Pierwszy przypadek: chcesz zaimportować plik
A.py
w plikuB.py
, te dwa pliki znajdują się w tym samym folderze, jak poniżej:Możesz to zrobić w pliku
B.py
:lub
lub
Następnie będziesz mógł korzystać ze wszystkich funkcji pliku
A.py
w plikuB.py
Drugi przypadek: chcesz zaimportować plik
folder/A.py
w plikuB.py
, te dwa pliki nie znajdują się w tym samym folderze, tak jak to:Możesz to zrobić w pliku B:
lub
lub
Następnie będziesz mógł korzystać ze wszystkich funkcji pliku
A.py
w plikuB.py
Podsumowanie: W pierwszym przypadku plik
A.py
jest modułem, który importujesz do plikuB.py
, użyłeś składniimport module_name
. W drugim przypadkufolder
jest to pakiet, który zawiera modułA.py
, użyłeś składniimport package_name.module_name
.Aby uzyskać więcej informacji o pakietach i modułach, zapoznaj się z tym linkiem .
źródło
from folder_a.script import *
Script.py znajduje się w folderze a.import sys
isys.path.append("..")
na początku pliku. Zgodnie z tym: stackoverflow.com/a/48341902/6057480 . Przetestowane, działające idealnie, po wykonaniu tej czynności będziesz mógł zaimportować plik py w katalogu nadrzędnym i nadal będzie mógł importować pliki py w tym samym katalogu i podkatalogach.i
Oto dwa proste sposoby, które do tej pory zrozumiałem, i upewnij się, że plik „file.py”, który chcesz zaimportować jako bibliotekę, znajduje się tylko w bieżącym katalogu.
źródło
Jeśli zdefiniowana funkcja znajduje się w pliku
x.py
:W pliku, w którym importujesz funkcję, napisz:
Jest to przydatne, jeśli nie chcesz importować wszystkich funkcji z pliku.
źródło
najlepszym sposobem na import plików .py jest
__init__.py
. najprostszą rzeczą do zrobienia jest utworzenie pustego pliku o nazwie__init__.py
w tym samym katalogu, w którym znajduje się plik.py.ten post Mike Grouchy jest doskonałym wyjaśnieniem
__init__.py
i jego wykorzystaniem do tworzenia, importowania i konfigurowania pakietów python.źródło
Sposób importowania polega na zaimportowaniu pliku i skróceniu jego nazwy.
Nie zapominaj, że importowany plik MUSI BYĆ nazwany z rozszerzeniem .py
źródło
import DoStuff.py as DS
próbowałbyś importowaćpy
zDoStuff
?Chciałbym dodać tę notatkę, której nie bardzo wyraźnie gdzie indziej; wewnątrz modułu / pakietu podczas ładowania z plików nazwa modułu / pakietu musi być poprzedzona znakiem
mymodule
. Wyobraź sobiemymodule
taki układ:Podczas ładowania
somefile.py
/otherstuff.py
z__init__.py
zawartości powinno wyglądać:źródło
Jeśli modułu, który chcesz zaimportować, nie ma w podkatalogu , spróbuj wykonać następujące czynności i uruchom
app.py
z najgłębszego wspólnego katalogu nadrzędnego:Struktura katalogów:
W
app.py
dołącz ścieżkę klienta do sys.path:Opcjonalne (jeśli ładujesz np. Konfiguracje) (Inspekcja wydaje się najbardziej niezawodna dla moich przypadków użycia)
Biegać
To rozwiązanie działa dla mnie zarówno w CLI, jak i PyCharm.
źródło
Istnieje kilka sposobów dołączania skryptu python o nazwie abc.py
Jeśli twój skrypt Pythona zostanie zaktualizowany i nie chcesz przesyłać - użyj tych instrukcji do automatycznego odświeżania. Bonus :)
źródło
Wystarczy zaimportować plik python do innego pliku python
powiedzmy, że mam plik python helper.py , który ma funkcję wyświetlania, np.
Teraz w app.py możesz użyć funkcji wyświetlania,
Wyjście,
I'm working sundar gsv
UWAGA: Nie trzeba określać rozszerzenia .py.
źródło
Może to zabrzmi szalenie, ale możesz po prostu utworzyć symboliczny link do pliku, który chcesz zaimportować, jeśli tworzysz do niego skrypt otoki.
źródło
Możesz także to zrobić:
from filename import something
przykład:
from client import Client
pamiętaj, że nie potrzebujesz.py .pyw .pyui
rozszerzenia.źródło
W ten sposób wywołałem funkcję z pliku Pythona, która jest dla mnie elastyczna do wywoływania dowolnych funkcji.
źródło
from mypath import Path
zPath = callfunc("/folder/to/mypath.py", "Path")
. Dzięki @ Xiao-FengLiIstnieje wiele sposobów wymienionych powyżej, ale uważam, że chcę po prostu zaimportować zawartość pliku i nie chcę pisać wierszy i wierszy oraz importować innych modułów. Tak więc wymyśliłem sposób na uzyskanie zawartości pliku, nawet ze składnią kropkową (
file.property
) zamiast scalania importowanego pliku z twoim.Po pierwsze, oto mój plik, który zaimportuję,
data.py
Uwaga: Zamiast tego możesz użyć
.txt
rozszerzenia.W
mainfile.py
rozpocznij od otwarcia i pobrania zawartości.Teraz masz zawartość jako ciąg, ale próba dostępu
data.testString
spowoduje błąd, podobnie jakdata
instancjastr
klasy, i nawet jeśli ma właściwośćtestString
, nie zrobi tego, czego się spodziewałeś.Następnie utwórz klasę. Na przykład (gra słów zamierzona)
ImportedFile
I włóż to w to (z odpowiednim wcięciem):
I na koniec przypisz
data
tak:I to wszystko! Po prostu uzyskaj dostęp, tak jak w przypadku dowolnego innego modułu, pisanie
print(data.testString)
zostanie wydrukowane na konsoliA string literal to import and test with
.Jeśli jednak chcesz, aby ekwiwalent po
from mod import *
prostu porzucił klasę, przypisanie instancji i usunął dentexec
.Mam nadzieję, że to pomaga :)
-Benji
źródło
Jedną z bardzo nieznanych funkcji Pythona jest możliwość importowania
zip
plików:Plik
__init__.py
pakietu zawiera następujące elementy:Możemy napisać kolejny skrypt, który może zaimportować pakiet z archiwum zip. Konieczne jest jedynie dodanie pliku zip do sys.path.
źródło