welcome
それがにあると仮定するとeasygui.py
、次のようになります。
def main():
externals.easygui.welcome()
これらは入力が面倒になる可能性があるため、サブパッケージを省略名でインポートするのが通例です。
import externals.easygui as eg
def main():
eg.welcome()
または、を追加してすべてをパッケージにすること__init__.py
ができ、そこからインポートされる名前空間を制御できます...
横方向のインポートに関する限り、これが私が設定したテストディレクトリ構造です。
steffen
|- __init__.py
|- main.py
|- easygui
|- __init__.py
|- gui.py
|- external
|- __init__.py
|- welcome.py
ここで、(簡単にするために)それぞれ__init__.py
がそのディレクトリに含まれるファイル/モジュールをインポートするだけです。だから、steffenで:
#steffen.__init__.py
import main
import easygui
import external
および外部
#steffen/external/__init__.py
import welcome
などなど。
実際のコードの場合:
main.py:
import easygui
def main():
easygui.gui.welcome()
easygui / gui.py:
import steffen.external as se
def welcome():
se.welcome.hello()
external /welcome.py
def hello():
print "Hello"
これで、これらすべてを使用できます。steffenの親ディレクトリ(パッケージsteffenがPYTHONPATHにあることを確認するため)では、次のことができます。
import steffen
steffen.main.main()
ふぅ!さて、持っているのは少しばかげていsteffen.main.main()
ます。関数を単に、として参照したい場合はsteffen.main()
、で設定できますsteffen.__init__.py
。次のように変更するだけです。
#steffen.__init__.py
from main import main
import easygui
import external
したがって、で関数を呼び出す場合はfoo.func()
、をインポートするスクリプトの__init__.py
ように呼び出すことになります。同様に、のように関数を呼び出す場合は、steffenをインポートするスクリプトのように呼び出します。うまくいけば、それは理にかなっています。私が思いついたこの最も単純な実例では、消化することがたくさんあります。利点は、これらすべてに取り組み、理解できれば、Pythonパッケージの作成について知っておくべきことのほとんどすべてを知っていることです(ここでも使用できる相対的なインポートや、実際にパッケージをインストールしますが、このことを理解すれば、それらはかなり簡単に理解できます)。steffen.foo.func()
steffen
foo()
__init__.py
steffen.foo()
setup.py