Tüm artılarını ve eksilerini olan bir python dosyasını içe aktarmanın birçok yolu vardır.
Sadece sizin için çalışan ilk içe aktarma stratejisini aceleyle seçmeyin, aksi takdirde daha sonra ihtiyaçlarınızı karşılamadığını fark ettiğinizde kod tabanını yeniden yazmanız gerekir.
En kolay örnek 1'i açıklamaya başlayacağım, sonra en profesyonel ve sağlam örnek # 7'ye geçeceğim
Örnek 1, Python yorumlayıcılı bir python modülünü içe aktarın:
Bunu /home/el/foo/fox.py içine koyun:
def what_does_the_fox_say():
print("vixens cry")
Python yorumlayıcısına girin:
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
>>>
what_does_the_fox_say()
Fox'u python yorumlayıcısı aracılığıyla içe aktardınız, fox.py içinden python işlevini çağırdınız.
Örnek 2, Diğer python dosyasını yerinde yürütmek için bir komut dosyasında execfile
veya ( exec
Python 3'te ) kullanın :
Bunu /home/el/foo2/mylib.py içine koyun:
def moobar():
print("hi")
Bunu /home/el/foo2/main.py içine koyun:
execfile("/home/el/foo2/mylib.py")
moobar()
dosyayı çalıştırın:
el@apollo:/home/el/foo$ python main.py
hi
Moobar işlevi mylib.py dosyasından içe aktarıldı ve main.py dosyasında kullanıma sunuldu
Örnek 3, Kullanım ... içe aktar ... işlevselliği:
Bunu /home/el/foo3/chekov.py içine koyun:
def question():
print "where are the nuclear wessels?"
Bunu /home/el/foo3/main.py içine koyun:
from chekov import question
question()
Bu şekilde çalıştırın:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Chekov.py içinde başka işlevler tanımladıysanız, import *
Örnek 4, Alındığı yerden farklı bir dosya konumunda ise riaa.py dosyasını içe aktarın
Bunu /home/el/foo4/stuff/riaa.py içine koyun:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Bunu /home/el/foo4/main.py içine koyun:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
Çalıştır:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Bu, yabancı dosyadaki her şeyi farklı bir dizinden içe aktarır.
Örnek 5, kullanım os.system("python yourfile.py")
import os
os.system("python yourfile.py")
Örnek 6, python startuphook'u piggyback yaparak dosyanızı içe aktarın:
Güncelleme: Bu örnek hem python2 hem de 3 için kullanılır, ancak şimdi yalnızca python2 için çalışır. python3, kullanıcı tanımlı tüm programlardan önce kodlarını küresel ad alanına kusursuz bir şekilde enjekte etmek için kullanarak, düşük yetenekli python kütüphanesi yazarları tarafından kötüye kullanıldığı için bu kullanıcı başlangıç kanca özellik kümesinden kurtuldu. Bunun python3 için çalışmasını istiyorsanız, daha yaratıcı olmanız gerekir. Size nasıl yapılacağını söylersem, python geliştiricileri bu özellik kümesini de devre dışı bırakacak, böylece kendi başınızasınız.
Bkz. Https://docs.python.org/2/library/user.html
Bu kodu giriş dizininize ekleyin ~/.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 )
Bu kodu main.py dosyanıza koyun (herhangi bir yerde olabilir):
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!")
Çalıştırın, şunu elde etmelisiniz:
$ 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!
Burada bir hata alırsanız: ModuleNotFoundError: No module named 'user'
python3 kullandığınız anlamına gelir, başlangıç kancaları varsayılan olarak orada devre dışıdır.
Bu jist için kredi şu şekildedir: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Üst teknelerinizi gönderin.
Örnek 7, En Sağlam: Dosyaları çıplak içe aktarma komutuyla python'a içe aktarın:
- Yeni bir dizin oluşturun
/home/el/foo5/
- Yeni bir dizin oluşturun
/home/el/foo5/herp
__init__.py
Herp altında boş bir dosya oluşturun :
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Yeni bir dizin oluşturun / home / el / foo5 / herp / derp
Derp altında başka bir __init__.py
dosya yapın:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
/ Home / el / foo5 / herp / derp altında, yolo.py
Bunu buraya koy adlı yeni bir dosya oluşturun :
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Gerçek anı, Yeni dosyayı yap /home/el/foo5/main.py
, bunu oraya koy;
from herp.derp.yolo import skycake
skycake()
Çalıştır:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
Boş __init__.py
dosya, geliştiricinin bu dizini içe aktarılabilir bir paket olmasını amaçladığı python yorumlayıcısına bildirir.
TÜM .py dosyalarının bir dizinin altına nasıl ekleneceği ile ilgili yazımı görmek istiyorsanız, buraya bakın: https://stackoverflow.com/a/20753073/445131