2015-07-22 2 views
-2

Это моя файловая структура.Python Импорт с использованием __init__.py вместо добавления в sys.path

/working dir 
    __init__.py 
    main.py 
    /packages 
     __init__.py 
     snafu.py 
     /subfolder1 
      __init__.py 
      foo.py 
     /subfolder2 
      __init__.py 
      bar.py 
     /many_more 
      ... 

Если я бегу main.py он будет пытаться импортировать, from subfolder1.foo import something Но foo.py попытается import subfolder2, который не будет работать, потому что subfolder2 не найден.

Было бы слишком много работы, чтобы войти в каждый файл и изменить каждый оператор импорта в from packages.a_subfolder.whatever import something

Я получил его на работу, добавив /packages к sys.path, но я бы предпочел не делать этого. Есть ли способ исправить это, используя файлы __init__.py?

Добавил бы import * в/packages __init__.py Файл работает?

Пакеты many_more/являются сторонними пакетами, которые я загрузил, так как я работаю над этим на разных компьютерах вместо установки пакетов на каждом компьютере, на котором я работаю, он просто использует тот, который находится в папке. Например: для использования googledrive в вашей программе вам нужно около 10 различных пакетов, чтобы заставить его работать.

+1

См https://docs.python.org/2/tutorial/modules.html#intra-package-references – jonrsharpe

+0

@jonrsharpe это будет работать, но тогда я должен был бы добавить t до примерно 50 заявлений на импорт. Мне нужно добавить это ко всем операторам импорта foo.py и bar.py, а также ко всем остальным пакетам. – Admiralmatt

+0

Ну, почему они были написаны так в первую очередь? Вы недавно изменили/реструктурировали свой пакет (wa-hey!)? – jonrsharpe

ответ

0

Так это выглядит как единственный способ, который работал, чтобы добавить

import sys, os 
packagepath = os.getcwd() + '/packages' 
sys.path.append(packagepath) 

к/пакеты __init__.py файл и вызвать его с помощью from packages.subfolder1.foo import something

0

В вашем случае кажется, что вы хотите импортировать модули, присутствующие в родительском dierectory. Имея следующий код в файл, из которого вы хотите импортировать модуль в родительский каталог должен работать:

import sys 
sys.path.append('.') 
sys.path.append('..') 
+0

OP спрашивает, как это сделать, используя файлы init –

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