2


0

Python-複雑なディレクトリ構造でPYTHONPATHする方法は?

次のファイル\ディレクトリ構造を考慮してください。

project\
|  django_project\
|  |  __init__.py
|  |  django_app1\
|  |  |  __init__.py
|  |  |  utils\
|  |  |  |  __init__.py
|  |  |  |  bar1.py
|  |  |  |  ...
|  |  |  ...
|  |  django_app2\
|  |  |  __init__.py
|  |  |  bar2.py
|  |  |  ...
|  |  ...
|  scripts\
|  |  __init__.py
|  |  foo.py
|  |  ...
  • foo.py sys.path.append を使用して、 bar1.py および bar2.py *を使用するにはどうすればよいですか? + * import *はどのように見えますか?

2 回答


2


*相対パス*を使用することは、移植性の理由からはるかに望ましいでしょう。

`foo.py`スクリプトの先頭に次を追加します:

import os, sys
PROJECT_ROOT = os.path.join(os.path.realpath(os.path.dirname(__file__)), os.pardir)
sys.path.append(PROJECT_ROOT)

# Now you can import from the django_project package
from django_project.django_app1.utils import bar1
from django_project.django_app2 import bar2


1


import sys
sys.path.append('/absolute/whatever/project/django_project/django_app1')
sys.path.append('/absolute/whatever/project/django_project/django_app2')

パスに両方を含めるかどうかを評価する必要がありますが - 両方に競合するモジュール名がある場合。 それは理にかなっているかもしれません パスに最大 django_project`のみを含め、必要なときに django_app1 / bar1.py`を呼び出し、必要なときに `import django_app2.bar2.whatever`を呼び出します。