一般的に使用されるPythonモジュール - パッケージ・クロスモジュールコードの呼び出し
まず、パッケージ(パッケージ)
あなたのモジュールファイルのより多くのように、データベースとのこのような相互作用などのモジュールファイルを、分割する必要があるフォルダとの相互作用の関連ページを置くフォルダを置くための責任があります。
my_proj/
├── apeland_web #代码目录
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── my_proj #配置文件目录
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
上記のように、フォルダ管理モジュールの複数のファイルは、フォルダは、パケットと呼ばれています
パッケージはフォルダですが、フォルダは下に存在しなければならないのinitの.pyファイル、ファイルの内容を空にすることができ、初期化現在のフォルダの.pyは、パッケージを識別するために使用されます。
この初期化の.pyファイルは、主にいくつかの初期化を包装するために使用され、このパッケージは現在、別のプログラムによって呼び出されるとき、初期化の.pyファイルは、あなたのいくつかは、パッケージがすぐに実行されている限り呼ばれたく、まず、通常の空に実行されますコードが中に配置することができますのinitの.py年。
第二に、クロスモジュールのインポート
次のようにディレクトリ構造があります
my_proj
├── apeland_web
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── my_proj
├── settings.py
├── urls.py
└── wsgi.py
上記構成によれば、どのようapelandを達成するために自分のWeb / views.pyをインポートするproj/settings.py
モジュール?
直接の場合に、それが見つからないというモジュールを文句を言うだろう
パスが見つからないため、my_proj / settings.py同等?Apeland_web / views.py父(apeland_web)弟(my_proj)息子(settings.py)、settings.pyみなさいとこviews.py友人、 views.pyにのみコードモジュール兄弟で同じレベルをインポート、またはバッグモジュールをサブレベルすることができ、我々はいとこのいとこの存在を知りません。これはそれを行う方法ですか?
答えは、あなたが、そのモジュールを探し始めるために父からの同等グレードをインポートすることができ、父親のクラスをのsys.pathへのパスを追加して、環境変数を追加します。
apeland_web / views.py環境変数を追加
import sys ,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__的是打印当前被执行的模块.py文件相对路径,注意是相对路径
print(BASE_DIR) # 输出是/Users/alex/PycharmProjects/apeland_py_learn/day4_常用模块/my_proj
sys.path.append(BASE_DIR)
from my_proj import settings
print(settings.DATABASES)
クロスインポート方法の第三に、公式の推薦
あなたは、環境変数の方法を追加することにより、クロスモジュールをインポートすることができますが、当局はそれが各ディレクトリの下に各プログラムのコードの環境変数を追加するには、再度作成する必要がありますので、そうすることはお勧めしませんが。
公式推奨プレイは、プロジェクト内のプログラムエントリを作成することで、全体のプロセスは、入り口からプログラムの開始を呼び出すことによって開始されるべきで、入学手続きは、通常、プロジェクトの最上位ディレクトリに置かれています。
これの利点は、/ときsettings.pyの環境変数を追加する必要はありません彼のいとこのmy_projをリコールにおけるプロジェクトレベル2 apeland_web / views.pyということです。
最上階にmanage.pyは、環境変数のパスが自動的にこのレベルでは... .XXX / my_proj /になりますプロジェクトの開始manage.pyのためであります