2016-02-25 4 views
0

Я проверил много вопросов, но не помог мне решить мою проблему. У меня есть структура папок:Файл доступа из вложенного каталога под PYTHONPATH

|--test/foo.py 
|--library/ #This is set as my PYTHONPATH 
|--|--file1.py 
|--|--folder1 
|--|--|--util.py 

Я пытаюсь получить доступ к util.py от foo.py.

Примечание: В этот момент я могу получить доступ ко всем файлам из библиотеки из тестовой папки. Но всякий раз, когда я пытаюсь открыть библиотеку/Folder1/util.py, это дает ошибку говоря "ImportError: No module named util"

Я попытался это до сих пор:
foo.py

import os 
import sys 
import file1 
sys.path.insert(0, '/folder1/') 
import util 
util.function_name 
#do something 

Этот подход работает, но тогда я не может использовать «library/file1.py». Есть ли более чистый способ избежать этого?

Примечание: Это только структура папок (я поддерживаю различать файлы), а не модули, (так я считаю, что я не могу использовать __init__.py и что-то вроде импорта utils.functionname)

+0

Почему вы не хотите ли брари быть пакетом? Я бы сказал, что если он не должен быть пакетом, то 'folder1' должен сидеть в библиотеке. Otherewise, если это _truly_ является библиотекой, тогда 'library' и' folder1' должны иметь '__init __. Py', позволяющие добавить' library' в PYTHONPATH, а затем просто импортировать: 'library.folder1.util.functionname' – OozeMeister

+0

@OozeMeister - Я пробовал, как вы объяснили. Итак, теперь у меня есть __init__.py в библиотеке, folder1. Но все же я не могу использовать функцию, которую хочу. – Dave

ответ

0

Изменить структуру папок, чтобы library в полный пакет так:

|--test/foo.py 
|--library/ 
|--|--__init__.py 
|--|--file1.py 
|--|--folder1/ 
|--|--|--__init__.py 
|--|--|--util.py 

А потом, в foo.py:

import os 
import sys 
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)) 
# you should now be able to import the following things: 
from library import file1 
from library.folder1 import util 
+0

У меня есть ваше мнение. Но до сих пор не удалось получить доступ к util.py. Я также проверил pythonpath env var. Я не могу понять, что именно я пропал без вести. – Dave

+0

Вы все еще пытаетесь использовать 'import util'? Или вы используете полный путь 'library.folder1.util'? – OozeMeister

+0

Я использую полный путь как 'from library.folder1 import util'. – Dave

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

  • Нет связанных вопросов^_^