Existe uma maneira de atualizar a versão do python usada em um virtualenv (por exemplo, se for lançado um bugfix)?
Eu poderia pip freeze --local > requirements.txt
remover o diretório e pip install -r requirements.txt
, mas isso requer muita reinstalação de grandes bibliotecas, por exemplo numpy
, que eu uso muito.
Percebo que essa é uma vantagem ao atualizar de, por exemplo, 2.6 -> 2.7, mas e 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
fonte
fonte
Respostas:
Você viu isso ? Se não entendi mal essa resposta, tente criar um novo virtualenv em cima do antigo. Você só precisa saber qual python vai usar seu virtualenv (você precisará ver sua versão virtualenv).
Se o seu virtualenv estiver instalado com a mesma versão python da versão anterior e a atualização do pacote virtualenv não for uma opção, você pode ler isso para instalar um virtualenv com a versão python desejada.
EDITAR
Eu testei essa abordagem (a que cria um novo virtualenv em cima do antigo) e funcionou bem para mim. Eu acho que você pode ter alguns problemas se mudar do python 2.6 para 2.7 ou 2.7 para 3.x, mas se você apenas atualizar dentro da mesma versão (mantendo-se em 2.7 como desejar), não deverá ter nenhum problema, pois todos os pacotes são mantidos nas mesmas pastas para as duas versões do python (os pacotes 2.7.xe 2.7.y estão dentro de your_env / lib / python2.7 /).
Se você alterar sua versão do virtualenv python, será necessário instalar todos os seus pacotes novamente para essa versão (ou apenas vincular os pacotes necessários à nova pasta de pacotes da versão, ou seja: your_env / lib / python_newversion / site-packages)
fonte
virtualenv
em cima do velho, e ele fez o trabalho. Eu tive que especificar-p
para apontar para a versão correta do python.Se você estiver usando o módulo venv que acompanha o Python 3.3+, ele suporta uma
--upgrade
opção. De acordo com os documentos :fonte
venv
e se recusam a corrigi-lo com base em "você poderia simplesmente usar o virtualenv". EDIT: na verdade, ele funciona! Ele também mostra uma mensagem de erro sobre "surepip".python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
ebin/python3
ainda ligado ao antigopython3.4
binário, e eu tive que definir os links manualmente. Além disso, existe uma maneira de remover a versão python agora desatualizada?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> o que isso significa? Não vejo processos python ativos, não é possível atualizar.python3.6 -m venv --upgrade ENV_DIR
para que ele funcionasse. Acho que ainda terei que atualizar alguns links simbólicosENV_DIR/bin
. Portanto, o truque era atualizar com a nova versão do Python enquanto a versão antiga ainda estava instalada.Atualizado novamente: O método a seguir pode não funcionar em versões mais recentes do virtualenv. Antes de tentar fazer modificações no antigo virtualenv, salve as dependências em um arquivo de requisitos (
pip freeze > requirements.txt
) e faça um backup dele em outro lugar. Se algo der errado, você ainda poderá criar um novo virtualenv e instalar as antigas dependências nele (pip install -r requirements.txt
).Atualizado: alterei a resposta cinco meses depois de responder originalmente. O método a seguir é mais conveniente e robusto.
Efeito colateral: também corrige a
Symbol not found: _SSLv2_method
exceção quando você fazimport ssl
em um ambiente virtual após atualizar o Python para a v2.7.8.Aviso: Atualmente, este é apenas 2.7.x Python .
Se você estiver usando o Homebrew Python no OS X, primeiro faça o
deactivate
virtualenv e atualize o Python:Execute os seguintes comandos (
<EXISTING_ENV_PATH>
é o caminho do seu ambiente virtual):Por fim, recrie seu ambiente virtual:
Ao fazer isso, os arquivos principais antigos do Python e as bibliotecas padrão (mais
setuptools
epip
) são removidos, enquanto as bibliotecas personalizadas instaladas nosite-packages
são preservadas e funcionando, assim que estiverem no Python puro. Bibliotecas binárias podem ou não precisar ser reinstaladas para funcionar corretamente.Isso funcionou para mim em 5 ambientes virtuais com o Django instalado.
BTW, se
./manage.py compilemessages
não estiver funcionando depois, tente o seguinte:fonte
bin/python
arquivo.setuptools
epip
é necessário.<EXISTING_ENV_PATH>/.Python
pois isso interrompeu a criação do virtualenv.rmvirtualenv <env_name>
e irá remover todas as suas dependências forradas :) Veja mais em: virtualenvwrapper.readthedocs.io/en/latest/...Não consegui criar um novo virtualenv em cima do antigo. Mas existem ferramentas no pip que tornam muito mais rápido reinstalar os requisitos em um novo dispositivo. O Pip pode criar cada um dos itens em seu requirements.txt em um pacote wheel e armazená-lo em um cache local. Quando você cria uma nova venv e executa a instalação do pip nele, o pip usará automaticamente as rodas pré-construídas, se as encontrar. O Wheels instala muito mais rápido do que executar o setup.py para cada módulo.
Meu ~ / .pip / pip.conf fica assim:
Eu instalo o wheel (
pip install wheel
) e depois corropip wheel -r requirements.txt
. Isso armazena as rodas construídas no direcional de roda no meu pip.conf.A partir de então, sempre que instalo algum desses requisitos, ele é instalado a partir das rodas, o que é bastante rápido.
fonte
Como atualizar a versão Python para um projeto virtualenvwrapper existente e manter o mesmo nome
Estou adicionando uma resposta para qualquer pessoa que use o excelente virtualenvwrapper de Doug Hellmann especificamente, pois as respostas existentes não fizeram isso por mim.
Algum contexto:
python3 -m venv
, ele não suporta ambientes Python 2mkproject
que cria o ambiente virtual, cria um diretório de projeto vazio e os cds neleworkon
comando virtualenvwrapper para ativar qualquer projeto, independentemente da versão do PythonInstruções:
Digamos que seu projeto existente seja nomeado
foo
e esteja atualmente executando o Python 2 (mkproject -p python2 foo
), embora os comandos sejam os mesmos, seja para atualizar de 2.x para 3.x, 3.6.0 para 3.6.1 etc. Também estou assumindo que você ' está atualmente dentro do ambiente virtual ativado.1. Desative e remova o ambiente virtual antigo:
Observe que, se você adicionou comandos personalizados aos ganchos (por exemplo,
bin/postactivate
) , precisará salvá-los antes de remover o ambiente.2. Esconda o projeto real em um diretório temporário:
3. Crie o novo ambiente virtual (e o diretório do projeto) e ative:
4. Substitua o diretório do projeto gerado vazio pelo projeto real, volte para o diretório do projeto:
5. Reinstale as dependências, confirme a nova versão do Python, etc:
Se esse for um caso de uso comum, considerarei abrir um PR para adicionar algo como
$ upgradevirtualenv
/$ upgradeproject
ao virtualenvwrapper.fonte
Essa abordagem sempre funciona para mim:
Tirado de:
fonte
Mudei meu diretório pessoal de um Mac para outro (Mountain Lion para Yosemite) e não percebi o virtualenv quebrado até que perdi o controle do laptop antigo. Eu tinha o ponto virtualenv para o Python 2.7 instalado
brew
e, como o Yosemite veio com o Python 2.7, eu queria atualizar meu virtualenv para o sistema python. Quando corrivirtualenv
em cima do diretório existente, estava recebendoOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
erro. Por tentativa e erro, resolvi esse problema removendo alguns links e corrigindo mais alguns manualmente. Isto é o que eu finalmente fiz (semelhante ao que o @Rockalite fez, mas mais simples):Depois disso, consegui executar o virtualenv no diretório existente.
fonte
No OS X ou no macOS usando o Homebrew para instalar e atualizar o Python3, tive que excluir links simbólicos antes
python -m venv --upgrade ENV_DIR
que funcionasse.Salvei o seguinte em upgrade_python3.sh, para que eu me lembrasse daqui a alguns meses quando precisar fazer isso novamente:
UPDATE: enquanto isso parecia funcionar bem no começo, quando eu executei o py.test, deu um erro. No final, acabei de recriar o ambiente a partir de um arquivo de requisitos.
fonte
py.test
não funciona porque `~ / .virtualenvs / myenv / bin / python3.7 não é um link simbólico; portanto, não é atualizado.~/.virtualenvs/myenv/.Python
que existe um link simbólico.Se você estiver usando
pipenv
, não sei se é possível atualizar um ambiente, mas pelo menos para atualizações de versão menores, parece ser inteligente o suficiente para não reconstruir pacotes do zero quando ele cria um novo ambiente. Por exemplo, de 3.6.4 a 3.6.5:fonte
Eu só quero esclarecer, porque algumas das respostas se referem
venv
e outras se referemvirtualenv
.O uso do sinalizador
-p
ou--python
é suportadovirtualenv
, mas não ativadovenv
. Se você possui mais de uma versão do Python e deseja especificar com qual criarvenv
, faça-o na linha de comando, assim:É claro que você pode atualizar com o
venv
que os outros indicaram, mas isso pressupõe que você já tenha atualizado o Python que foi usado para criar issovenv
em primeiro lugar. Você não pode atualizar para uma versão Python que ainda não possui em seu sistema em algum lugar; portanto, certifique-se de obter a versão desejada primeiro e, em seguida, faça todos os recursos que deseja.fonte
Etapa 1: Congele o requisito e faça um backup do ambiente existente
Etapa 2: Instale o Python 3.7 e ative o ambiente virutal
Etapa 3: instalar requisitos
fonte
Para todos com o problema
Você deve instalar o python3.6-venv
fonte