2009-09-18 5 views
2

Возможно ли инкапсулировать модули python 'mechanize' и 'BeautifulSoup' в один .py-файл?Как инкапсулировать модули python?

Моя проблема заключается в следующем: У меня есть скрипт python, который требует механизации и BeautifulSoup. Я называю это с php-страницы. Сервер веб-хостинга поддерживает python, но не имеет установленных модулей. Вот почему я хотел бы это сделать.

Извините, если это глупый вопрос.

Редактировать: Спасибо всем за ваши ответы. Я думаю, что решение для этого решает вокруг virtualenv. Может ли кто-нибудь быть любезным, чтобы объяснить мне это очень просто? Я прочитал страницу virtualenv, но все же очень смущен. Еще раз спасибо.

ответ

2

ЗАКАНЧИВАТЬ virtualenv, чтобы создайте локальную установку python, где вы можете установить BeautifulSoup и все другие нужные вам библиотеки.

http://pypi.python.org/pypi/virtualenv

4

Вам не нужно комбинировать файлы или устанавливать их в общесистемном расположении. Просто убедитесь, что библиотеки находятся в каталоге, который может быть прочитан вашим скриптом Python (и, следовательно, вашим PHP-приложением) и добавлен в путь загрузки Python.

Время выполнения Python выполняет поиск библиотек в каталогах в массиве sys.path. Вы можете добавлять каталоги к этому массиву во время выполнения, используя переменную окружения PYTHONPATH, или явно добавляя элементы к sys.path. Фрагмент кода ниже, добавил в сценарий Python, добавляет каталог, в котором сценарий находится на пути поиска, неявно делает все библиотеки, расположенные в том же месте для импорта:

import os, sys 
sys.path.append(os.path.dirname(__file__)) 
+0

Спасибо за ваш ответ. Мой вопрос знает, что: Когда я загружаю BeautifulSoup, есть много файлов. Достаточно ли только «BeautifulSoup.py» для выполнения всей работы? Опять же, извините, если это немой вопрос :). – nunos

+0

Возможно, вам все нужно, и вам нужно установить их с установкой python setup.py. Если у вас нет прав на это, попробуйте virtualenv. –

+0

«BeautifulSoup.py» будет работать автономно, пока выполняется импорт. – Chazadanga

0

Нет, вы не может (в целом), так как это может разрушить модуль поиска метода, который питон использует (файлы и каталоги). Я предполагаю, что вы могли бы, с каким-то хаком, создавать иерархию модулей без фактического макета файловой системы, но это огромный хак, вероятно, что-то вроде

>>> sha=types.ModuleType("sha") 
>>> sha 
<module 'sha' (built-in)> 
['__doc__', '__name__'] 
>>> sha.foo=3 
>>> sha.zam=types.ModuleType("zam") 
>>> sha.foo 
3 
>>> dir(sha) 
['__doc__', '__name__', 'foo', 'zam'] 

Но в любом случае вы должны сгенерировать код, который создает этот макет и сохраняет материал в правильно названные идентификаторы.

Возможно, вам нужно научиться использовать .egg-файлы. Это уникальные агломерированные объекты, содержащие вашу библиотеку, например .jar.

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