import файлов находящихся в соседней папке

 
0
 
Python
ava
zloyGamer | 14.06.2010, 00:57
добрый вечер всем

подскажите как для такой структуры каталогов/файлов :
Цитата

  myFunc2\__init__.py
  myFunc2\testmod2.py
  prj\myFunc1\__init__.py
  prj\myFunc1\testmod1.py
  prj\myFunc1\testmod1.pyc
  prj\__init__.py
  prj\prj0.py
  __init__.py



из "prj\prj0.py" импортировать обьекты "myFunc2\testmod2.py"

если в "prj\prj0.py" прописать:
from myFunc1.testmod1 import * # - тут все ок!

#а если так:
from ..myFunc2.testmod2 import *
#или так:
from ...myFunc2.testmod2 import *
то ошибка: ValueError: Attempted relative import in non-package

все файлы __init__.py - пустые,
вроде все делал как
тут написано, но безрезультатно.
Kommentare (4)
ava
scorpil | 14.06.2010, 01:01 #
Цитата


Обратите внимание, что относительное импортирование основано на имени текущего модуля. Поскольку имя главного модуля всегда „__main__“, модули, предназначенные для использования в качестве главных модулей приложения на Python, должны всегда использовать абсолютное импортирование (absolute imports).



Читать надо внимательно.
Но все же в Python 2.6 есть один способ. Если очень надо смотри PEP 366. Я не разбирался.
ava
zloyGamer | 14.06.2010, 09:58 #
нда..., scorpil вы открыли мне глаза ),
тоесть получается в Python31 уже никак нельзя просто включить/импортнуть модуль из соседней папки?
это както дико, жестко ограничивает и подталкивает к написанию велосипедов/костылей,
а может у кого завалялся/есть какой нить ручной вариант импорта?
ava
scorpil | 14.06.2010, 17:56 #
Опять...
Цитата


модули, предназначенные для использования в качестве главных модулей приложения на Python, должны всегда использовать абсолютное импортирование (absolute imports).



Добавить модуль можно. Нельзя сделать это с помощью родственного импортирования, и только.

Было бы довольно смешно если бы в современный язык программирования непозволял сделать такую простую "махинацию".
Не советовал бы вам нарушать древовидную архитектуру программы, но если очень надо - перед импортом просто добавьте адрес нужной папки в переменную sys.path. Например:

import sys
sys.path.append('../myFunc2')

import testmod2


Должно помочь.
ava
zloyGamer | 15.06.2010, 06:42 #
да, спс, я пока так и сделал

import sys

from myFunc1.testmod1 import *

sys.path.insert(0, "..")
from myFunc2.testmod2 import *
sys.path.pop(0) #убираем за собой

но, это не вариант
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden