Найти - Пользователи
Полная версия: Динамический импорт
Начало » Python для экспертов » Динамический импорт
1 2
igor.kaist
patriotyk
Я как составлял этот пост кажется понял в чем проблема, у меня sys.path:
Правильно говорят, что правильно поставленный вопрос, это уже половина ответа :)
Ed
patriotyk
Я как составлял этот пост кажется понял в чем проблема, у меня sys.path
нету /usr/share/python-support, как такое случилось?
Если у вас что-то дебианообразное(Ubuntu?), то его там и не должно быть.

А вот симлинк на это ниже /usr/lib/python*/ должен. Вот, например:
$ ls -l /var/lib/python-support/python2.4/pyparsing.py
lrwxrwxrwx 1 root root 55 Nov 17 2008 /var/lib/python-support/python2.4/pyparsing.py -> /usr/share/python-support/python-pyparsing/pyparsing.py
Все это похоже на трудности с пакетной системой.
patriotyk
Ed
patriotyk
Я как составлял этот пост кажется понял в чем проблема, у меня sys.path
нету /usr/share/python-support, как такое случилось?
Если у вас что-то дебианообразное(Ubuntu?), то его там и не должно быть.

А вот симлинк на это ниже /usr/lib/python*/ должен. Вот, например:
$ ls -l /var/lib/python-support/python2.4/pyparsing.py
lrwxrwxrwx 1 root root 55 Nov 17 2008 /var/lib/python-support/python2.4/pyparsing.py -> /usr/share/python-support/python-pyparsing/pyparsing.py
Все это похоже на трудности с пакетной системой.
Не понял коммента. У меня дебиан ленни. В нем практически все python модули устанавливаются в /usr/share/python-support/ .
Вопрос в том почему он не в sys.path импортируемого модуля.
Ed
patriotyk
Не понял коммента. У меня дебиан ленни. В нем практически все python модули устанавливаются в /usr/share/python-support/ .
Вопрос в том почему он не в sys.path импортируемого модуля.
Да, модули устанавливаются туда. Только потом на них делаются симлинки ниже /usr/lib/, которые я показал.

Давайте я покажу на примере. Возьмем первый попавшийся пакет, скажем python-xdg.
Смотрим, что у нас в пакете:
$ dpkg -L python-xdg
...
/usr/share/python-support
/usr/share/python-support/python-xdg
/usr/share/python-support/python-xdg/xdg
/usr/share/python-support/python-xdg/xdg/RecentFiles.py
/usr/share/python-support/python-xdg/xdg/IniFile.py
/usr/share/python-support/python-xdg/xdg/Config.py
...
Из-за врожденной ущербности пакетной системы Debian симлинки, о которых я говорил вы не видите. И никто не видит. А они есть :)

Смотрим откуда у нас этот xdg будет импортироваться:
In [1]: import xdg
In [2]: xdg.__file__
Out[2]: '/usr/lib/pymodules/python2.5/xdg/__init__.pyc'
Смотрим что же у нас такое лежит в /usr/lib/pymodules/python2.5/xdg/:
$ ls -l /usr/lib/pymodules/python2.5/xdg/
total 152
lrwxrwxrwx 1 root root 57 2009-04-27 14:44 BaseDirectory.py -> /usr/share/python-support/python-xdg/xdg/BaseDirectory.py
-rw-r--r-- 1 root root 4341 2009-04-27 14:45 BaseDirectory.pyc
lrwxrwxrwx 1 root root 50 2009-04-27 14:44 Config.py -> /usr/share/python-support/python-xdg/xdg/Config.py
-rw-r--r-- 1 root root 1613 2009-04-27 14:45 Config.pyc
lrwxrwxrwx 1 root root 56 2009-04-27 14:44 DesktopEntry.py -> /usr/share/python-support/python-xdg/xdg/DesktopEntry.py
-rw-r--r-- 1 root root 18519 2009-04-27 14:45 DesktopEntry.pyc
...
Смотрим, есть ли у нас /usr/lib/pymodules/python2.5/ в sys.path:
$ python -c 'import sys; print sys.path'
['', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/gst-0.10', '/usr/lib/pymodules/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0', '/usr/lib/pymodules/python2.5/gtk-2.0', '/usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode']
Как видите есть.

Вот, так оно и работает. Поэтому, раз у вас симлинков этих нет я и предположил, что вы забивали шурупы молотком, то бишь инсталлировали пакет с использованием –force-yes и подобных заменителей лома.

Пробовал я все это на Debian testing, он же squeeze/sid.

Удачи!
patriotyk
К сожелению у меня есть симлинки в /usr/lib/pymodules/python2.5/pylons и они верные. ставил пакеты нормально из сида и там проблем нету потому что пайлонс апликации работают. Не импортятся pylons модули из модуля который бил динамически загружен.
Александр Кошелев
patriotyk
ImportError: cannot import name config
А как называется модуль в котором вы делаете динамический импорт? И нет ли модуля pylons.py где-то в sys.path выше?
patriotyk
Daevaorn
patriotyk
ImportError: cannot import name config
А как называется модуль в котором вы делаете динамический импорт? И нет ли модуля pylons.py где-то в sys.path выше?
хм даже не задумывался. Модуль в котором делаю иморт зовется app.py но модуль который динамически импортируюу это мой модуль pylons.py. Наверное конфликт какой то.
patriotyk
Я проверил да это изза моего pylons.py если его убрать то все работет. Как мне обойти это не переназывая файла?
bialix
patriotyk
Я проверил да это изза моего pylons.py если его убрать то все работет. Как мне обойти это не переназывая файла?
простой ответ: никак.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB