Como duplicar virtualenv


130

Eu tenho um virtualenv existente com muitos pacotes, mas uma versão antiga do Django.

O que eu quero fazer é duplicar esse ambiente, então eu tenho outro ambiente com exatamente os mesmos pacotes, mas uma versão mais recente do Django. Como posso fazer isso?


3
Gostaria de congelar todos os seus requisitos em um arquivo 'requirements.txt' e criar outro virtualenv e executar os requisitos de instalação do pip.txt.txt
Calvin Cheng

Se a versão do python do ambiente virtual que você deseja copiar é diferente do seu ambiente de python padrão, você pode configurar o novo ambiente como virtualenv -p /path/to/older/venv/bin/python new_venve, em seguida, usar o requirements.txtque você gerada depoispip freeze
GiriB

Respostas:


183

A maneira mais fácil é usar o pip para gerar um arquivo de requisitos. Um arquivo de requisitos é basicamente um arquivo que contém uma lista de todos os pacotes python que você deseja instalar (ou já instalou no caso de arquivo gerado pelo pip) e em quais versões eles estão.

Para gerar um arquivo de requisitos, entre no virtualenv original e execute:

pip freeze > requirements.txt

Isso irá gerar o arquivo requirements.txt para você. Se você abrir esse arquivo no seu editor de texto favorito, verá algo como:

Django==1.3
Fabric==1.0.1
etc...

Agora, edite a linha que diz Django==x.xpara dizer Django==1.3(ou qualquer versão que você deseja instalar em seu novo virtualenv).

Por fim, ative seu novo virtualenv e execute:

pip install -r requirements.txt

E o pip fará o download e instalará automaticamente todos os módulos python listados no seu arquivo requirements.txt , nas versões que você especificou!


3
Obrigado! Enquanto googling eu encontrei tantas ruidosos, desarrumado e confuso páginas ... Sua solução é tão limpo e simples ... ele fez o meu dia;)
dolma33

e se eu copiar a pasta e colá-la em outra máquina? Funcionaria? Supondo, claro, as dependências do apt-get foram resolvidos
Tales Pádua

De fato, não é, como estou descobrindo agora.
214166 Horlog_buzz

Vejo muitas mensagens. Could not find a version that satisfies the requirement a_package=#.#.#Posso resolvê-lo facilmente? Eu removi uma linha ou mudei a igualdade para a desigualdade.
Change-the-world

Funciona para pyenvtambém. Resposta incrível.
Leonard

29

Outra opção é usar o virtualenv-clonepacote:

Um script para clonar um virtualenv não realocável.


Oi, estou certo de assumir que isso me permite copiar um ambiente python TODO em um arquivo. Então eu apenas teria que carregar este arquivo em um novo computador / OS e gostaria de obter todos os meus pacotes local instalado volta
aceminer

2
"virtualenv-clone source / target /" funcionou como um encanto, obrigado!
ajankuv

verifique se instalamos virtualenv-cloneapós ativar o virtualenv
4givN

15

virtualenvwrapperfornece um comando para duplicar virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]

7
Não é realmente uma boa ideia. "A cópia de ambientes virtuais não é bem suportada. Cada virtualenv possui informações de caminho codificadas nele, e pode haver casos em que o código de cópia não sabe que precisa atualizar um arquivo específico. Use com cuidado".
Temak

5

Se você estiver usando o Anaconda, basta executar:

conda create --name myclone --clone myenv

Isso será copiado myenvpara o ambiente recém-criado chamado myclone.


4

A opção mais fácil é usar o virtualenv-clonepacote.

Para duplicar venv1para venv2, siga estas etapas:

  1. Instale virtualenv-cloneem um venv1ou em um ambiente virtual simulado venv_dummy. Para criar venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. Para instalar virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Para duplicar venv1para venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/

o prompt no bash não é alterado, precisa editar o bin / ativar e não é 100% claro como
MrR 14/06

@ Mr .. você não precisa editar bin/activatese seguir esta resposta. Por que você tem que editar bin/activate?
Safwan 15/06

Depois de clonar, meu prompt no bash tinha o nome do ambiente original, por causa da seção PS1 dentrobin/activate
MrR

1

Você não pode simplesmente:

  • Copie o diretório env virtual existente para um novo
  • Atualizar para o novo Django?

7
Algumas vezes eu uso essa abordagem, mas tem o inconveniente de ter que atualizar alguns caminhos dentro do script bin / enable.
Armando Pérez Marqués

3
A mudança é simples de encontrar e substituir referências ao nome do ambiente, ou é mais complicada do que isso?
Greg

1
No meu caso, simplesmente atualizando o caminho na constante VIRTUAL_ENV no bin / activate fez o truque
bryanph

1
Por outro lado, mudar de bin / ativar é um hack e é preciso se perguntar se isso pode quebrar coisas em algum momento. Especialmente quando ambientes virtuais são usados ​​em configurações de produção.
Herbert

2
Isso quebra muitas coisas. É mais fácil recriar ou clonar o virtualenv. Tentei fazer exatamente isso (enquanto aguarda a abertura de um servidor proxy para reinstalar todos os pacotes necessários e começar do zero), e ele não está funcionando! Eu pensei que estava sendo inteligente, mas, infelizmente, serão necessários muitos hackers para colocar isso em funcionamento e, honestamente, há coisas muito melhores para fazer.
31516 Horlog_buzz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.