(Por favor corrija erros e omissões conforme necessário. Obrigado.)
Primeiro, uma pergunta e um comentário. Eu não uso o SUSE, então pegue isso com uma pitada de sal. Os pacotes que são instalados nos pacotes oficiais do /usr/lib/python2.6/site-packages? Em caso afirmativo, o SUSE está corrompido, portanto, isso não é provável. Se eles não são pacotes oficiais, você pode pedir aos empacotadores para usar os caminhos padrão, ou, alternativamente, você poderia enviar um bug de lista de desejos para o SUSE, solicitando que ele ofereça suporte a esse caminho adicional. Isso poupará você e outras pessoas de dores de cabeça adicionais.
No momento, você tem as seguintes possibilidades, em ordem decrescente:
-
Altere o caminho de pesquisa do módulo para todos os usuários (método 1)
Altere o caminho de pesquisa do módulo no Instalação em Python.
O caminho de pesquisa do módulo padrão é hardwired no binário. Adicionar caminhos podem ser configurados em tempo de execução, por exemplo, no arquivo site.py. Por exemplo, o Debian usa /usr/lib/python2.6/site.py (para o instalação padrão do python 2.6) para faça sua configuração específica do site. No topo do arquivo está escrito
Append module search paths for third-party packages to 'sys.path'. **************************************************************** * This module is automatically imported during initialization. * **************************************************************** [...] This will append site-specific paths to the module search path.
O patch do Debian %código% diz
For Debian and derivatives, this sys.path is augmented with directories for packages distributed within the distribution. Local addons go into /usr/local/lib/python/dist-packages, Debian addons install into /usr/{lib,share}/python/dist-packages. /usr/lib/python/site-packages is not used.
O patch em questão é
sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) elif os.sep == '/': + sitedirs.append(os.path.join(prefix, "local/lib", + "python" + sys.version[:3], + "dist-packages")) sitedirs.append(os.path.join(prefix, "lib", "python" + sys.version[:3], - "site-packages")) - sitedirs.append(os.path.join(prefix, "lib", "site-python")) + "dist-packages")) + sitedirs.append(os.path.join(prefix, "lib", "dist-python")) else: sitedirs.append(prefix) sitedirs.append(os.path.join(prefix, "lib", "site-packages"))
Você pode modificar o site.path em seu pacote de sistema para produzir um modificado caminho de pesquisa do módulo. Você provavelmente não quer isso, no entanto. Por um lado, você terá que mesclar isso em cada atualização de o pacote python da sua distribuição.
-
Altere o caminho de pesquisa do módulo para todos os usuários (método 2)
Adicione um arquivo com o formato algo.pth para um diretório que já está em o caminho de pesquisa, que contém um caminho, relativo ou absoluto. Por exemplo.
/usr/local/lib/python2.6/dist-packages$ cat foo.pth /home/faheem/dummypythonpath
Em outro terminal,
>>> import sys >>> sys.path [...,'/home/faheem/dummypythonpath',...,]
-
Altere o caminho de pesquisa do módulo para todos os usuários (método 3)
A variável de ambiente PYTHONPATH é normalmente usado para anexar ao caminho do sistema no nível do usuário. Você pode colocá-lo em um arquivo que será originado por todos os usuários. Por exemplo. no Debian temos o /etc/bash.bashrc, que diz no topo
# System-wide .bashrc file for interactive bash(1) shells. # To enable the settings / commands in this file for login shells as well, # this file has to be sourced in /etc/profile.
Você pode adicionar ou PYTHONPATH lá. Você provavelmente quer que seja originado para login e conchas interativas, então você vai querer para verificar isso. Infelizmente, distribuições são muitas vezes esquisito sobre permitindo isso.
Os caminhos em PYTHONPATH são adicionados à lista padrão de caminhos de busca no sistema (que podem ser obtidos para exemplo por sys.path - veja abaixo). Permitindo o possibilidade de que o PYTHONPATH já esteja definido, basta adicionar diretórios adicionais desejados a ele, por exemplo.
export PYTHONPATH=$PYTHONPATH:"/home/username/lib/python2.6/dist-packages"
Se você fonte a variável PYTHONPATH e, em seguida, verifique sys.path novamente, você vai
veja os caminhos foram adicionados. Observe que a posição em que os caminhos no
PYTHONPATH são adicionados aos caminhos pré-existentes não parece ser prescrito por a implementação. -
Altere o caminho de pesquisa do módulo por usuário.
A maneira usual é mudar PYTHONPATH no bashrc do usuário, ou seja,
debian/patches/site-locations.diff
. Mais uma vez, verifique se é originado para login e conchas interativas. -
Altere o caminho de pesquisa do módulo por script. este é feito anexando ao sys.path, ou seja
import sys sys.path.append(some_additional_path)
Isso só funcionará para o script que está importando isso. Isto é normalmente usado, tanto quanto eu sei, por uso casual, ao importar módulos em locais fora do padrão, como de em algum lugar em um diretório inicial.
Veja também Greg Ward no Modificação do caminho de pesquisa do Python . Isso tem uma boa discussão sobre as alternativas disponíveis.