VadimHacker
Дек. 16, 2009 14:05:31
Как определить путь к модулю из самого себя?
Ситуация такая. Есть пакет с модулями. В этом же пакете находится папка со статичными данными. Мне нужно из модулей обращаться к файлам из этой папки. Но я не знаю пусть до модулей.
VadimHacker
Дек. 16, 2009 14:12:41
Атирибут __file__
Renji
Дек. 16, 2009 23:30:56
А разве название модуля не возвращает путь до него?
Ferroman
Дек. 17, 2009 00:58:04
Само по себе - нет, не возвращает.
Rodegast
Дек. 17, 2009 11:35:29
используй относительные пути к своим данным и не мучайся.
bw
Дек. 18, 2009 07:11:42
Посмотри pkg_resources.resource_stream(…) и вообще в сторону pkg_resources.
Я стараюсь использовать этот пакет для работы с ресурсами хранящимися в директории пакета.
К тому же такой метод гарантирует доступ даже к “заяйцованному” (и упакованному) файлу.
..bw
regall
Дек. 18, 2009 09:44:22
import os
class X(object):
pass
print os.path.abspath(X.__module__)
Андрей Светлов
Дек. 18, 2009 11:23:49
regall, __module__ все же возвращает *имя* модуля. По которому через sys.modules можно получить *объект* модуля, у которого есть __file__ - *путь* к этому модулю.
А так, конечно, bw правильно советует - pkg_resources лучше всех таких выкрутасов.
regall
Дек. 18, 2009 12:02:13
Андрей Светлов
По которому через sys.modules
Да, действительно я делал так:
os.path.abspath(sys.modules[X.__module__].__file__)
хм… Надо посты с утра писать только после кофе. =)
Андрей Светлов
Дек. 18, 2009 12:19:42
Лучше - делать copy/paste таких маленьких примеров прямо из консоли. Тогда не ошибешся :)