Pergunta

Alguém por favor pode me explicar o que está acontecendo com python no Ubuntu 9.04?

Eu estou tentando girar virtualenv, ea bandeira --no-site-packages parece não fazer nada com o Ubuntu. Eu instalei virtualenv 1.3.3 com easy_install (que eu atualizado para setuptools 0.6c9) e tudo parece estar instalado para /usr/local/lib/python2.6/dist-packages

I assumem que ao instalar um pacote usando apt-get, ele é colocado em /usr/lib/python2.6/dist-packages/?

A questão é, há uma /usr/local/lib/python2.6/site-packages também que apenas se senta lá estar vazio. Pareceria (olhando para o path em um virtualenv) que esta é usa a pasta virtualenv como backup. Assim, mesmo pensei que eu omitir --no-site-packages, eu não posso acessar meus pacotes de sistemas locais de qualquer da minha virtualenv do.

Então, minhas perguntas são:

  1. Como faço para obter virtualenv para apontar para um dos dist-packages?
  2. que dist-pacotes devo apontá-lo para? /usr/lib/python2.6/dist-packages ou /usr/local/lib/python2.6/dist-packages/
  3. O que é o ponto de /usr/lib/python2.6/site-packages? Não há nada lá!
  4. É chegar primeiro servir no caminho? Se eu tiver uma versão mais recente do XYZ pacote instalado em /usr/local/lib/python2.6/dist-packages/ e e mais velho (de repos Ubuntu / apt-get) em /usr/lib/python2.6/dist-packages, qual é importado quando eu import xyz? Estou assumindo que este é baseado na lista do caminho, sim?
  5. Por que diabos isso é tão confuso? Existe algo que eu estou ausente aqui?
  6. Onde é definido que easy_install deve instalar a /usr/local/lib/python2.6/dist-packages?
  7. Isso afetará pip bem?

Graças a quem pode esclarecer isso!

Foi útil?

Solução

eu estaria tentado a cortá-lo, fazendo site-packages um link para dist-pacotes, mas acho que isso pode afetar outros casos em que você deseja instalar alguns extensão diferente do dist ubuntu. Eu não consigo pensar em outra resposta para 1 exceto aprimorando fontes de VIRTUALENV (tanto com ubuntu e virtualenv ser tão popular eu não ficaria surpreso de encontrar versões tweaked já existem).

Re 2, se você estiver usando / usr / local / bin / python você deve usar o usr / versão / local da lib (incluindo site-packages) e, inversamente, se você estiver usando / usr / bin / python .

Re 3, haverá algo lá se você nunca instalar uma extensão para / usr / bin / python a partir de fontes (não via easy_install ou de distro Ubuntu).

Re 4, sim, as entradas anteriores sobre o caminho têm prioridade.

Re 5, easy_install é fácil apenas em seu nome - ele faz tanta magia negra que tem sido cuidadosamente mantido fora da biblioteca padrão do Python apesar de sua conveniência, porque o consenso entre nós python committers é que magia negra profunda por conveniência é "fácil" apenas na superfície.

Re 6, eu acho que é um ubuntu modificação para easy_install -. Se isso é certo, então ele está definido onde quer Canonical ou outros mantenedores ubuntu tomar suas decisões coletivas

Re 7, desculpe, nenhuma idéia - eu não tenho razoavelmente recente ubuntu na mão para verificar

.

Outras dicas

Eu acredito que a resposta de Mike Orr de a lista de discussão virtual env parece ser a melhor. Observe o OP publicada esta questão em ambos os lugares.

conteúdo original do mail:

Anos atrás Debian criado / usr / local / lib / pythonVERSION / site-packages, e compilou o binário Python para incluí-lo na busca padrão caminho. Ubuntu seguido vantagem do Debian como normalmente faz. o Python desenvolvedores não fez como este, porque você deseja obter a interferência com a instalado localmente / usr / local / bin / python usando as mesmas site-packages diretório. Ubuntu finalmente decidiu abandonar site-pacotes e uso dist-pacotes em vez disso, um nome que eles inventaram para que ele não faria interfere em nada. A história loing está lá fora em algum lugar, se você google-lo, em algum lugar do Python bug tracker ou distutils SIG ou tal.

O sistema funciona, pelo menos se você usar o pacote do Ubuntu virtualenv. Algumas pessoas tiveram problemas usando um virtualenv instalado localmente em Ubuntu porque as entradas do mágicas sys.path não estavam sendo adicionado ou alguma coisa. Eu não tenho certeza sobre --no-site-packages porque eu nunca uso essa opção: eu corro PIL e mysqldb dos pacotes do Ubuntu porque Pode ser difícil para compilar suas dependências C algumas vezes. (Precisa do arquivos de cabeçalho certas, Python está ignorando os arquivos de cabeçalho, etc.)

pacotes Então Ubuntu Python entrar em / usr / lib / pythonVERSION / dist-pacotes. Ou que python-support anuário por algum motivo. pacotes Python instalado localmente entrar em / Usr / local / lib / pythonVERSION / dist-pacotes por padrão. Sempre que eu instalar um sistema Ubuntu 9.04 eu corro:

$ sudo apt-get install python-setuptools (6.0c9) $ Sudo apt-get install python-virtualenv (1.3.3) $ Sudo easy_install pip $ Pip sudo instalar virtualenvwrapper

Os virtualenvs funcionar bem desta forma, embora eu não tenha tentado --no-site-packages.

Eu estou tentando girar virtualenv, ea bandeira --no-site-packages parece não fazer nada com o Ubuntu. Eu instalei virtualenv 1.3.3 com easy_install (que eu atualizado para setuptools 0.6c9)

Estas versões estão ambos no Ubuntu 9.04, então você está tornando mais difícil em -se por instalá-los localmente.

e tudo parece estar instalado para /usr/local/lib/python2.6/dist-packages

Sim

Eu assumo que ao instalar um pacote usando apt-get, ele é colocado em / usr / lib / python2.6 / dist-packages /?

Sim

  1. É chegar primeiro servir no caminho? Se eu tenho uma mais recente versão do XYZ pacote instalado em /usr/local/lib/python2.6/dist- packages / ee mais velho (de repos ubuntu / apt-get) em / usr / lib / python2.6 / dist-embalagens, qual é importado quando eu importar xyz? Estou assumindo que este é baseado na lista do caminho, sim?

sys.path é digitalizada em ordem. A única coisa engraçada é que os ovos .pth conseguir colocar mais cedo ou mais tarde no caminho do que algumas pessoas esperam. Mas se você estiver usando pip por tudo que ele pode fazer (ou seja, exceto para instalar pip em si, ovos pré-compilados, e um instantâneo de um diretório local que é um copiar em vez de uma ligação de ovo), você não vai ter muitos ovos .pth de qualquer maneira.

  1. Por que diabos isso é tão confuso? Existe algo que eu sou faltando aqui?

Não é bem documentada. Eu percebi isso por digitalizar a web.

  1. Isso afetará pip também?

Sim, pip irá instalar automaticamente para / usr / local / lib / pythonVERSION / site-packages. Use "pip instalar -E $ VIRTUAL_ENV packagename" para instalar em um virtualenv.

Você realmente não deve tocar instalação Python do Ubuntu, a menos que você está construindo ferramentas de administração do sistema, ou a construção de algo que poderia ser considerado como um novo serviço do sistema.

Se você estiver usando o Ubuntu para desenvolver ou implantar aplicações Python, sempre construir o seu próprio Python a partir da fonte, tar-se, e usar isso para implantação. Dessa forma, você terá todos os diretórios no lugar certo e virtualenv funcionará normalmente. Se você implantar vários Python aplicativos no servidor, em seguida, fazer o seu Python viver em algum lugar como /home/python ou /opt/python ou fora em algum lugar de seu diretório home. Certifique-se que você tem permissões de gravação para o grupo de desenvolvedores (users?) De modo que as pessoas podem facilmente adicionar pacotes.

Isso também permite que você tenha dois níveis de pacotes. Os que são a sua casa-in ferramentas padrão pode ser instalado em sua distro Python e ser parte do pacote que você implantar e apenas os pacotes específicos do aplicativo seria em um virtualenv.

Não atualizar ou modificar o sistema Ubuntu instalado Python.

Bem, eu tenho um Ubuntu 9.04 e rapidamente tentou a criação de um par de caixas de areia com site-packages e um sem. E as coisas estão funcionando bem.

A única diferença na abordagem Tomei é que eu usei pacote python-virtualenv do Ubuntu (1.3.3). E presumir que ele é ajustado pela equipe Ubuntu para atender às configurações do Ubuntu.

Para resumir virtualenv easy_installed desativar por um tempo, uso embalados python-virtualenv e ver se que atenda às suas expectativas.

Na verdade, usamos configuração similar para a produção sem qualquer problema. Resto já foi respondida por Alex.

Outra maneira de corrigi-lo:
https://stackoverflow.com/a/17265840/202168

tem que se lembrar de fazer isso em cada virtualenv onde for necessário, mas não depende de hacks ou uma versão especial do virtualenv

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