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:
def what_does_the_fox_say():
print("vixens cry")
Wejdź do interpretera 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
>>>
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:
def moobar():
print("hi")
Umieść to w /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ępniona w main.py
Przykład 3, Użyj z ... importuj ... funkcjonalność:
Umieść to w /home/el/foo3/chekov.py:
def question():
print "where are the nuclear wessels?"
Umieść to w /home/el/foo3/main.py:
from chekov import question
question()
Uruchom tak:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
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:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Umieść to w /home/el/foo4/main.py:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
Uruchom:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
To importuje wszystko z obcego pliku z innego katalogu.
Przykład 5, użyj os.system("python yourfile.py")
import os
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
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 pliku main.py (może być w dowolnym miejscu):
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 to, powinieneś dostać to:
$ 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!
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:
- Utwórz nowy katalog
/home/el/foo5/
- Utwórz nowy katalog
/home/el/foo5/herp
Utwórz pusty plik o nazwie __init__.py
herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Utwórz nowy katalog / home / el / foo5 / herp / derp
W ramach derp utwórz kolejny __init__.py
plik:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
Pod / home / el / foo5 / herp / derp utwórz nowy plik o nazwie yolo.py
Umieść to tutaj:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Chwila prawdy: Zrób nowy plik /home/el/foo5/main.py
, umieść go tam;
from herp.derp.yolo import skycake
skycake()
Uruchom:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
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