Форум сайта python.su
Написал кое какое приложение, возник вопрос доступности этого скрипта для конечного пользователя, самым часто встречающейся ошибкой отсутствие необходимого модуля. В принципе не проблема написать инструкцию типа
try: from selenium import webdriver except: print u'не могу загрузить модуль selenium, возможно у вас не установлен данный модуль, для установки перейдите по ссылке http://pypi.python.org/pypi/selenium и действуйте согласно инструкции' os.sys.exit(1)
Отредактировано agryn (Окт. 14, 2012 11:37:05)
Офлайн
Обычно работа по установке нужных модулей выполняется при инсталляции разработанного вами модуля (см например distribute). Я за свою практику работы с питоном ни разу не встретился с вашей самой частой ошибкой.
agrynА что вы будете тестировать? Код может содержать куски(и обычно содержит) которые в результате нетривиального анализа окружения подгружают те либо иные модули. Обычная ситуация когда перечень подгружаемых модулей зависит от входного потока данных или действий пользователя. Можно проверить перечень модулей которые могут быть потенциально подгружены. Но это тоже бесполезно, поскольку рядовой случай подгрузка разных модулей под разные ОС (тогда исправный модуль по вашему мнению будет неисправен).
перед началом работы будет проверять и тестировать.
Отредактировано doza_and (Окт. 14, 2012 14:15:58)
Офлайн
doza_and> ни разу не встретился с вашей самой частой ошибкой
Дело в том что установка некоторых зависимостей может быть опциональной (т.е. какой-то функционал становится недоступным), тогда такая проверка имеет право на существование (это мой мнение, мнение Гвидо по этому вопросу мне не известно :-).
agryn, про то что нужно правильно оформлять свой код/пакет/дистр только что было сказано (см. distutils+setuptools/distribute), да-да, я про setup.py с блэк-джеком и egg'йцами. Так вот, если все такие умные как яГвидо, то поголовно все нужные тебе зависимости уже кошерным способом установлены в систему (после python setup.py install/develop), а это значит что ты можешь пройтись по ним используя православный pkg_resources. С батарейками это не сработает, но зачем их проверять.
..bw
Офлайн
Когда-то уже спрашивал - а как поставить модули, не оформляя свой код в виде модуля?
Офлайн
:)
odnochlenМожет чего путаю, но модулем является любой файл с кодом на питоне. Вы хотите распространять код не записывая ничего в файлы? Я наверное не понял вопроса….
а как поставить модули, не оформляя свой код в виде модуля
>>> import aaa Traceback (most recent call last): File "<interactive input>", line 1, in <module> ImportError: No module named aaa
try: ..... except: .....
try: ..... except ImportError: .....
Отредактировано doza_and (Окт. 14, 2012 20:49:21)
Офлайн
doza_and, в виде пакета, т.е. чтобы он не ставился в систему, ставил только зависимости.
Офлайн
odnochlen, используй pkg_resources что бы проверить что установлено и setuptools что бы установить, ничего нового и оригинального предложить не могу. Вот грубый пример (не проверял):
import warnings import pkg_resources import setuptools.command.easy_install def require(eggsdir, requirement): ws = pkg_resources.working_set if not eggsdir in ws.entries: ws.add_entry(eggsdir) try: ws.require(requirement) except pkg_resources.DistributionNotFound: try: setuptools.command.easy_install.main(['-mxd', eggsdir, requirement]) except SystemError: warnings.warn('сделать по людски') else: ws.require(requirement) return ws.find(pkg_resources.Requirement.parse(requirement)) require('.python-eggs', 'zc.buildout')
Офлайн
А зачем два раза ws.require? Оно с инета модули может ставить (как pip)?
Что будет, если не проверяя вызвать easy_install?
Есть разница, ставить модули через easy_install или через pip?
А setuptools в тройке искаропки нет, что там делать?
Отредактировано odnochlen (Окт. 15, 2012 04:14:28)
Офлайн