O virtualenv existente pode ser atualizado normalmente?

93

Eu tenho um virtualenv criado para Python 2.5 e quero "atualizá-lo" para Python 2.6.

Aqui está como ele foi originalmente configurado:

virtualenv --no-site-packages -p python2.5 myenv

Agora executo o virtualenv no mesmo diretório para atualizar:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

O python padrão ainda é 2,5, embora eu também possa especificar 2,6. Existe alguma maneira de remover completamente o 2.5 e fazer com que 'bin / python' aponte para 2.6 em vez disso?

Matt Norris
fonte

Respostas:

62

Você pode usar o Python 2.6 virtualenv para "revirtual" o diretório existente. Você terá que reinstalar todos os módulos instalados. Costumo ter um diretório virtual para desenvolver um módulo e virtualenv o mesmo diretório com muitas versões do Python, e funciona muito bem. :)

Lennart Regebro
fonte
1
Obrigado! Eu tentei o seu método e vi que o script 'ativar' está atualizado, mas a versão antiga permanece (consulte a questão revisada). Você pode dar um exemplo?
Matt Norris
13
você pode simplesmente remover o executável bin / python no virtualenv antes de executar novamente o virtualenv com o python 2.6.
Carl Meyer
9
Bem, você pode fazer funcionar - mas por quê? A grande atração do virtualenvé que torna fácil e barato ambientes python reproduzíveis. Por que bagunçar com um e não ter certeza de que consertou tudo ou de que pode reproduzi-lo novamente ou de que está perturbando seu ambiente de produção quando pode apenas fazer um novo limpo?
Ned Deily
9
@Ned: Virtualenv não cria ambientes reproduzíveis, cria ambientes isolados. Para reproduzi-los é necessário também instalar tudo da mesma forma, o virtualenv não é suficiente para isso. zc.buildout é melhor lá.
Lennart Regebro
1
@Ned: Ponto alcançado; este é um ambiente de desenvolvimento no qual eu estava trabalhando. Eu queria mantê-lo no 2.5, a menos que fosse absolutamente necessário fazer o 2.6. Essa necessidade surgiu, então eu estava curioso para saber se você poderia atualizar um ambiente isolado para ver os efeitos em seu código, sem ter que reconstruir e copiar / colar diretórios para o novo env.
Matt Norris
19

No Python 3.3+, venv oferece suporte a --upgrade sinalizador

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Uso:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Acabei de atualizar meu venv do Python 3.7.x para 3.8 em vários projetos sem nenhum problema.

Vlad Bezden
fonte
1
"presumindo que o Python foi atualizado no local" ... isso, infelizmente, parece significar que se meu sistema python3apontar para 3.6, eu não consigo criar python3para apontar para 3.7 em meu venv
joel
4

Você deve criar um novo virtualenvusing python2.6e então, após ativar o novo env, usar its python2.6e its easy_installpara instalar novas versões de quaisquer pacotes de sites que você precisa. Esteja ciente de que o nome do caminho para o virtualenvestá conectado em vários arquivos dentro do ambiente, então, quando você estiver pronto para alternar para ele, altere seus scripts de inicialização e outros para se referir ao novo virualenvcaminho ou tenha muito cuidado ao copiá-lo para o diretório antigo e modificando os nomes dos caminhos dentro dele.

Ned Deily
fonte
3

Instale um segundo Python no CentOS

  1. baixar python
  2. instalar no diff local

    configure --prefix=/opt/virtualenv/python 
    make && make install
  3. criar env virtual usando novo python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python

    nota: se necessário, pode ser feito com um usuário diferente

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
  4. Crie um ambiente virtual:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
  5. Instale o pip com python 2.7 (dentro do virtualenv)

    easy_install pip 
Xoroz
fonte
0

Se você estiver usando o OS X, tente fazer isso se quiser atualizar o Python para uma versão menor (por exemplo, 2.7.6 para 2.7.8) enquanto mantém o funcionamento de bibliotecas de terceiros.

Funciona para mim em 5 ambientes virtuais diferentes com Django instalado.

Rockallite
fonte