Python - Как PYTHONPATH со сложной структурой каталогов? - PullRequest
2 голосов
/ 14 июля 2010

Рассмотрим следующую структуру файлов \ каталогов:

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
|  |  ...

Как мне использовать sys.path.append в foo.py , чтобы я мог использовать bar1.py и bar2.py ?
Как будет выглядеть import ?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Использование относительных путей было бы намного более желательным по причинам переносимости.

Вверху вашего 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 голос
/ 14 июля 2010
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, когда вам это нужно.

...