Esta pergunta não é uma duplicata.
Não se refere apenas a renomear um ambiente virtual, mas também a movê- lo para um diretório diferente, incluindo, potencialmente, um diretório de usuário diferente.
Isso não é o mesmo que simplesmente renomear um ambiente virtual, especialmente para pessoas não familiarizadas com o virtualenvs.
Se eu criar um virtualenv e movê-lo para uma pasta diferente, ele ainda funcionará?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... mais tarde naquele dia, o ambiente virtual mudou ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Questão:
Isso vai funcionar?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Quero dizer isso menos como uma questão sobre a sabedoria de tentar isso (a menos que essa sabedoria seja engraçada, é claro), e mais sobre se é possível. Eu realmente quero saber se é possível fazer no Python 3 ou se eu apenas tenho que engolir e clonar.
Posso apenas mv
uma virtualenv
como que sem tristeza? Eu quero evitar tristeza.
fonte
Scripts
dir (equivalente abin
em * nix) e diz algo comoactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
basicamente está reclamando do hash-bang no arquivo header não é o python.exe do virtualenv atual, é aquele de onde o movi -easy fixou. Eu olhei naquele roteiro chique e ele já descobriu seu próprio caminho de qualquer maneira - legal. Alguns dos outros scripts também não dependem de caminhos (por exemplo, deactivate.bat), portanto, em resumo, isso funciona.activate.ps1 cannot be made relative
pode ser ignorada porque o script já é relativo. A mensagem não é útil no Windows, porque os scripts não usam#!
diretivas como no Linux para informar ao shell qual aplicativo deve executá-lo. Oactivate.bat
não é modificado, mas não é usado (pelo menos no Windows 10, chamaractivate
inicia o script PoSH), então não, não precisei editar nenhum script. O problema épip.exe
que tem um caminho para Python embutido em código e precisa ser editado com um editor hexadecimal ou apenas reinstalado.pip freeze
um arquivo de requisitos para que você possa reinstalar facilmente todos os seus pacotes, docker (funciona bem com o virtualenv instalado nele), conda, pyenv ou algumas outras ferramentas. Você deve ser capaz de criar e destruir ambientes como infraestrutura imutável, eles não devem ser preciosos.Para Python 3.3+ (com novo
venv
módulo integrado)Resposta curta (independentemente da versão):
Resposta longa:
A partir do Python v3.3,
virtualenv
tornou-se um módulo integrado chamadovenv
.A
--relocatable
opção mencionada em outras respostas não foi incluídavenv
e, atualmente, não há uma maneira boa e segura que eu conheça de renomear ou realocar um ambiente virtual Python.No entanto, existe uma maneira bastante simples de simplesmente recriar um ambiente virtual, com todos os seus pacotes instalados atualmente. Consulte esta resposta ou consulte a seção abaixo para obter informações sobre como recriar um ambiente virtual. Durante o processo, você pode recriar o novo ambiente em qualquer local e com o nome que desejar. Ou consulte a seção abaixo para ver o processo.
Nessa resposta, ele menciona alguns outros pacotes de terceiros que podem suportar mudanças ou renomeações diretas. Se você está decidido a buscar uma maneira de mover um ambiente virtual intacto, pode verificar se eles também funcionam com ele
venv
.Observação: nessa resposta, o foco está em
virtualenv
, em vez devenv
. Veja abaixo como traduzir.venv
xvirtualenv
sintaxe de comando mais antigaO comando a ser usado
venv
é:em vez de apenas
virtualenv
, que é instalado como um comando no pacote original. Onde "python" se refere ao modo como você executa seu executável python, que pode ser uma variedade de coisas, como:python
py
oupy -3.7
ou semelhante (o Python Launcher para Windows para Python 3.3+ e Windows apenas no momento)python3
(convenção para ambientes Linux que instalam duas vezes o python 2 e 3)c:\program files\python37\python.exe
Se você não tiver certeza de qual versão está sendo executada, você sempre pode
python --version
descobrir.Como recriar um ambiente virtual
Criar / recriar um ambiente virtual é fácil e deve se tornar uma segunda natureza depois de trabalhar um pouco com eles. Este processo reflete o que você faria para distribuir seu script como um pacote (com suas dependências) na primeira metade, e então o que alguém faria para instalar seu script / pacote para desenvolvimento posterior.
Primeiro, obtenha uma lista atualizada do que há no ambiente virtual. Com ele ativo, obtenha a versão do Python que ele usa e salve a lista de dependências em um arquivo.
Use
python --version
com o ambiente virtual ativado para ver qual versão do Python ele está usando.Use
python -m pip freeze > requirements.txt
para criar a lista de dependências do pacote atual e colocá-las norequirements.txt
arquivo. Este comando funciona no Linux ou no Git Bash com certeza - não 100% certo sobre o Powershell ou a linha de comando no Windows.Agora crie um novo ambiente virtual e adicione as dependências do antigo.
Faça o seu novo venv.
python
como o comandopython.exe
na pasta do ambiente virtualpython -m venv my_new_venv
para criar um novo ambiente virtual no diretório de trabalho atual em uma novamy_new_venv
pasta.Instale suas dependências do
requirements.txt
arquivo.python -m pip install -r requirements.txt
Você pode precisar reinstalar os pacotes locais que estão em modo de desenvolvimento.
Observe, se você precisar ver o local específico em que um pacote está instalado, use:
python -m pip list -v
-v
ou "verbose" irá adicionar algumas informações extras sobre cada pacote instalado, incluindo o caminho em que está instalado. Isso é útil para garantir que você está mantendo os pacotes virtuais, do usuário e do sistema instalados corretamente.Neste ponto, você pode apenas excluir a pasta venv antiga e todo o conteúdo. Eu recomendo usar uma GUI para isso - as exclusões de arquivos geralmente são permanentes na linha de comando do Linux, e um pequeno erro de digitação pode ser uma má notícia.
fonte
pip wheel . -w wheels
e, em seguida, apenas reinstalar os pacotes no novo ambiente virtual compip install --no-index --find-links /path/to/wheels/ -r requirements.txt
O
--relocatable
argumento paravirtualenv
parece permitir que você faça isso.fonte
virtualenv --relocatable my-python-venv
APÓS o ambiente já existir.--help
:This fixes up scripts and makes all .pth files relative
. Não, não vai fazer bibliotecas independentes de plataforma. Se você quiser movê-lo para uma plataforma diferente, precisará reinstalá-lo com base no python local.MAS ALAS:
Não, você não pode simplesmente
mv
. Existem soluções alternativas, mas pode ser mais fácil reinstalar.(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory (my-python-venv)$ deactivate $
... pressiona
enter
muito em frustração, e o seguinte funcionaExceto que não é, portanto
my-python-venv
, tristeza.Quer
mv
o seuvirtualenv
e usá-lo, caso contrário, não modificada?Resposta curta:
Bem, você não pode .
fonte
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
assumir que seu bin e lib estão em sua pasta venv atual. Eu uso isso como uma maneira rápida e suja de copiar e mover envs virtuais python3 com muitos pacotes pip instalados.--relocatable
? Além disso, Nathan, ótima pergunta, mas esta é uma resposta terrível. Aceitar sua própria resposta é sempre um pouco tendencioso, a menos que seja bem escrito e enumere claramente as opções, mas determinar que você mesmo seria subjetivo de qualquer maneira.mv
um venv?", E a resposta é "não, você não pode simplesmentemv
, existem soluções alternativas, mas pode ser mais fácil reinstalar". Se essa fosse a melhor resposta, pouparia a mim e a outros algum tempo.Sim, isso deve ser possível se você não fez nada que dependa do diretório atual do virtualenv.
No entanto, se você tiver escolha, a melhor coisa a fazer é criar um novo virtualenv e começar a usar o novo virtualenv. Esta é a escolha mais segura e com menor probabilidade de causar problemas posteriormente.
A documentação menciona que :
Por exemplo, se você o executou
setvirtualenvproject
, não será possível alternar para o diretório correto após a execução,workon ...
então, nesse caso, será necessário corrigir isso manualmente.Em geral, um virtualenv é pouco mais do que um diretório com os arquivos do interpretador Python necessários mais os pacotes de que você precisa.
fonte
Usando as respostas deste e de outros tópicos sobre tópicos semelhantes, fiz um script bash que, localizado e executado dentro do próprio diretório virtualenv , ajudará em seus movimentos do virtualenv.
Depois de fazer isso,
virtualenv --relocatable yourenv
você precisará alterar suaVIRTUAL_ENV
variável toda vez que mover o diretório, então se você não quiser alterá-la manualmente, use isto.#!/bin/bash \n DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate) NEWDIR=VIRTUAL_ENV=\"$DIR\" sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate source bin/activate
Espero que ajude.
fonte
SIM VOCÊ PODE! (Em
windows
)A solução alternativa é fácil, basta mover seu ambiente virtual para qualquer lugar e editar
activate.bat
dentro descripts\
:Mova para o ambiente virtual para o diretório desejado
Clique com o botão direito e edite
activate.bat
localizado emvenv_folder\scripts
.Alterar
VIRTUAL_ENV
variável de:set VIRTUAL_ENV=C:\old_directory\venv_name
para dentro
set VIRTUAL_ENV=C:\new_directory\venv_name
Salve o arquivo em lote editado e pronto!
NOTA: Minha solução deve funcionar e economizar
windows users
configuração de novos ambientes virtuais, duvido que funcione em outro sistema operacional, pois.bat
éMS-DOS
fonte
old_directory
paraold_directory
- isso é um erro de digitação?