2015-06-24 11 views
1

На Python 2.7 У меня есть следующие:Python импорт из относительного пути

dir1/dir2/File1.py 
dir1/dir3/File2.py 

File2.py хочет импортировать File1.py

Что не-Hacky, вещий, стандартные способы сделать это?

dir1, dir2 и dir3 содержат __init__.py

+0

Являются ли 'dir1',' dir2' или 'dir3' модулями? – Blender

+0

non-hacky - это сделать 'dir1' и' dir1.dir2' в пакеты. –

+0

В качестве альтернативы добавьте 'dir1/dir2' в ваш' PYTHONPATH'. – Evert

ответ

0
touch dir1{,/dir2}/__init__.py 

и, вероятно,

touch dir1{,/dir3}/__init__.py 

затем, в File2.py:

from dir1.dir2 import File2 

fram = File2.Framistan(12) 

бонусные баллы за setup.py с:

from setuptools import setup, find_packages 

setup( 
    ... 
    packages=find_packages(), 
    ... 
) 

связать их вместе.

Для любого произвольного FileX.py, чтобы увидеть другой пакет, вам необходимо установить PYTHONPATH в вашу среду. Но для идиоматического способа сделать это, просто используйте setup(), как указано выше. Это поместит ваши пакеты в путь поиска от вашего имени.

+0

Брайан, я не понимаю, что 'setup.py' связано с вопросом об относительном импорте. – Evert

+0

@Brian Это не сработало. – abc

+0

dir3 $ питон File2.py Traceback (самый последний вызов последнего): Файл "File2.py", строка 1, в из dir1.dir2 импорта FILE1 ImportError: Нет модуль с именем dir1.dir2 – abc

0

С относительно импорта:

Для получения дополнительной информации, просто читать documentation

Там, как представляется, предпочтение абсолютной импорта среди программистов Python; этот пример дается Brian Cain's answer.

Смежные вопросы