Pergunta

É possível encapsular python modules 'mecanizar' e 'BeautifulSoup' em um único arquivo .py?

Meu problema é o seguinte: Eu tenho um script python que requer mecanizar e BeautifulSoup. Eu estou chamando-o de uma página php. O serviço de hospedagem servidor suporta python, mas não tem os módulos instalados. É por isso que eu gostaria de fazer isso.

Desculpe se isso é uma pergunta estúpida.

Edit: Obrigado a todos por suas respostas. Acho que a solução para isso resolve em torno virtualenv. alguém poderia ter a amabilidade de me explicar isso em termos muito simples? Tenho ler a página virtualenv, mas ainda estou muito confuso. Obrigado mais uma vez.

Foi útil?

Solução

Confira virtualenv, para criar uma instalação python local, onde você pode instalar BeautifulSoup e todas as outras bibliotecas que você deseja.

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

Outras dicas

Você não realmente tem que combinar os arquivos, ou instalá-los em um local de todo o sistema. Apenas certifique-se as bibliotecas estão em uma legível diretório pelo seu script Python (e, portanto, pela sua aplicação PHP) e adicionado ao caminho de carga Python.

O Python runtime pesquisas para bibliotecas nos diretórios na matriz sys.path. Você pode adicionar diretórios para essa matriz em tempo de execução usando a variável de ambiente PYTHONPATH, ou anexando explicitamente itens para sys.path. O trecho de código a seguir, adicionados a um script Python, acrescenta o diretório no qual o script está localizado ao caminho de pesquisa, fazendo implicitamente qualquer bibliotecas localizadas no mesmo lugar disponível para importação:

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

Não, você não pode (em geral), porque isso destruiria o método de busca módulo que usa Python (arquivos e diretórios). Eu acho que você poderia, com algum corte, gerar uma hierarquia módulo sem ter o layout do sistema de arquivos real, mas este é um enorme corte, provavelmente algo como

>>> 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']

Mas, em qualquer caso, você teria que gerar o código que cria esse layout e armazena o material em identificadores devidamente nomeados.

O que você precisa é, provavelmente, para aprender a usar .egg arquivos. Eles são entidades aglomerados únicas contendo sua biblioteca, como arquivos .jar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top