13

基本的に、私はこの男と同じ質問をしています: How to do relative imports in Python?

しかし、誰も彼に正しい答えを与えませんでした。サブフォルダー内にいて、ディレクトリに移動してから別のサブフォルダーに移動したい場合、彼らが提案したことを実行しても機能しません(OPが回答へのコメントで指摘したように)。

sys.path を使用してこれを実行できることはわかっていますが、よりクリーンな方法をお勧めします。

例:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

Module_A を Module_B にインポートするにはどうすればよいですか?

4

3 に答える 3

12
main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. あなたが実行しますpython main.py
  2. main.pyする:import app.package_a.module_a
  3. module_a.pyするimport app.package_b.module_b

あるいは、2 つまたは 3 つを使用できます。from app.package_a import module_a

appPYTHONPATH にある限り、これは機能します。main.pyそれならどこでもいい。

したがってsetup.py、アプリ パッケージ全体とサブパッケージをターゲット システムの python フォルダーとmain.pyターゲット システムのスクリプト フォルダーにコピー (インストール) する を記述します。

于 2009-01-21T02:15:30.967 に答える
2

Python 2.5以降で正しく読ん でいる場合:

from ..Module_B import Module_B

私は Python に精通していると思っていましたが、バージョン 2.5 でそれが可能になるとは思いもしませんでした。

于 2009-01-21T00:27:19.923 に答える
0

次に Module_B を App にインポートする場合は、

Module_B.py: ModuleA をインポート

App.py (デフォルトで Pythonpath にある ModuleA もインポートします)

import Module_B.Module_B

もう 1 つの方法は、__init__.py (Module_A/App フォルダーにあるもの) を次のように更新することです。

import os
import sys
sys.path.extend('%s../' % os.getcwd())
import ModuleA

もう 1 つの方法は、フォルダーを PYTHONPATH 環境変数に追加することです。

于 2009-01-21T00:42:43.790 に答える