Usando Python 3 no virtualenv

781

Usando o virtualenv , eu executo meus projetos com a versão padrão do Python (2.7). Em um projeto, preciso usar o Python 3.4.

Eu costumava brew install python3instalá-lo no meu Mac. Agora, como crio um virtualenv que usa a nova versão?

por exemplo, sudo virtualenv envPython3

Se eu tentar:

virtualenv -p python3 test

Eu recebo:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable
Prometeu
fonte
1
você tentou atualizar apenas o intérprete no seu ambiente atual ou decidiu começar do zero?
Charlie Parker
É possível instalar apenas python3 em ambiente virtual sem atualizar o sistema python (mantendo em python2.x) no mac?
Jun

Respostas:

1386

simplesmente corra

virtualenv -p python3 envname

Atualizar após a edição do OP:

Houve um erro na versão do virtualenv do OP, conforme descrito aqui . O problema foi corrigido executando:

pip install --upgrade virtualenv
tbrisker
fonte
17
O virtualenv Upgrade funcionou, mas por algum motivo eu também tinha que ser explícito sobre executável python3 comvirtualenv -p $(which python3) envname
dkamins
2
é possível alterar apenas o interpretador python do ambiente atual em vez de criar um novo ambiente?
Charlie Parker
No Raspbian, Jessie 'virtualenv --no-site-packages python3.4' funcionou. --distribute está obsoleto e -p não parece necessário, pois o virtualenv usa python3.
alkopop79
Por que, após a execução virtualenv -p python3 my_virtual_env, também python3é acessível de fora do ambiente virtual?
Bishwas Mishra
@CharlieParker Você pode executar as duas etapas seguintes em sequência: 1. Eliminar os bin, lib, include, locale sharediretórios no diretório raiz do seu projeto. 2. Na execução do terminal: virtualenv -p python3 .que inicializa um novo virtualenv Python3 no diretório atual.
Calleniah
251

O Python 3 possui um suporte interno para ambientes virtuais - venv . Talvez seja melhor usá-lo. Referindo-se aos documentos:

A criação de ambientes virtuais é feita executando o script pyvenv:

pyvenv /path/to/new/virtual/environment

Atualização para Python 3.6 e mais recente:

Como pawciobiel comenta corretamente , pyvenvestá obsoleto no Python 3.6 e a nova maneira é:

python3 -m venv /path/to/new/virtual/environment
geckon
fonte
2
eu espero que você está correto desde que eu só deixou virtualenv para trabalhar com pyenv juntamente com python 3.5.2
Jayesh
1
Não encontrei nenhuma informação que confirmasse as preocupações relacionadas ao local. O relocável foi removido como uma opção ... agora é desnecessário? é uma solução alternativa? ou agora é completamente inútil preparar um aplicativo?
JM Becker
7
Exatamente, mas você também pode executar: python3 -m venv /path/v3uma vez que o script pyvenv foi preterido a partir do Python 3.6.
pawciobiel
4
usando o anaconda python 3.6 mais recente no mac e python3 -m venv /path/v3erros aqui. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitEstou esquecendo de algo? Com a --without-pipopção, pelo menos, cria o venv com ativar / desativar scripts corretamente.
Monkut #
3
Alguém sabe como ativar um python3.6 -m venv <venvname>. Não há Scripts / no diretório criado, nem "ativar" no bin / subdir.
21717 Shayne
60

Eu tentei pyenv e é muito útil para alternar versões do python (global, local na pasta ou no virtualenv):

brew install pyenv

instale a versão Python que você deseja:

pyenv install 3.5.0

e simplesmente crie virtualenv com caminho para a versão necessária do interpretador:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

É isso aí, verifique a versão:

. ./myenv/bin/activate && python -V

Também existem plugins para pyenv pyenv-virtualenv, mas isso não funcionou para mim de alguma forma.

Johnner
fonte
parece que seu método exige a criação de um novo ambiente python. O pyenv pode funcionar com o virtualenv e alterar minha versão do python sempre que eu quiser?
Charlie Parker
58

Instale os pré-requisitos.

sudo apt-get install python3 python3-pip virtualenvwrapper

Crie um ambiente virtual baseado em Python3. Opcionalmente, habilite o --system-site-packagessinalizador.

mkvirtualenv -p /usr/bin/python3 <venv-name>

Definido no ambiente virtual.

workon <venv-name>

Instale outros requisitos usando o pipgerenciador de pacotes.

pip install -r requirements.txt
pip install <package_name>

Ao trabalhar em vários projetos python simultaneamente, geralmente é recomendável instalar pacotes comuns como pdbppglobalmente e depois reutilizá-los em virtualenvs.

O uso dessa técnica economiza muito tempo na busca e instalação de pacotes, além de consumir espaço em disco e largura de banda de rede mínimos.

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Instruções específicas do Django

Se houver muitos pacotes python em todo o sistema, é recomendável não usar --system-site-packagesflag, especialmente durante o desenvolvimento, pois notei que isso diminui bastante a inicialização do Django. Presumo que a inicialização do ambiente do Django esteja verificando manualmente e anexando todos os pacotes de sites do caminho do sistema, o que pode ser o motivo. Atépython manage.py shell fica muito lento.

Dito isto, experimento que opção funciona melhor. Pode ser seguro simplesmente pular --system-site-packagesflag para projetos do Django.

Sandeep
fonte
1
Eu aplico isso a OSX, funcionou (exceto não usar apt-get, mas brew)
sdkks
38
virtualenv --python=/usr/bin/python3 <name of env>

trabalhou para mim.

bewithaman
fonte
Eu tentei isso, mas é dito The executable python3 (from --python=python3) does not exist: o que você faria? Eu queria preparar isntall python3 mas não tinha certeza se isso era uma boa idéia ou se o meu sistema iria ficar confuso de qual versão python Eu estou usando
Charlie Parker
Funciona como um encanto no Ubuntu 16.04!
Eric Vieira
20

Você pode especificar uma versão específica do Python ao criar um ambiente.
É mencionado em virtualenv.py

virtualenv --python=python3.5 envname

Em alguns casos, esse deve ser o caminho completo para o executável:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Como -pfunciona

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)
Kiran Jasvanee
fonte
esta é a melhor resposta aqui
Collier
14

Eu tive a mesma ERRORmensagem. A solução da tbrisker não funcionou no meu caso. Em vez disso, isso resolveu o problema:

$ python3 -m venv .env
Aziz Alto
fonte
13

É tudo o que você precisa para executar um ambiente virtual em python / python3

Primeiro, se virtualenvnão estiver instalado, execute

pip3 install virtualenv 

Agora execute:

virtualenv -p python3 <env name> 

Em algum momento o cmd virtualenvfalhar, se for o caso, use isto:

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Agora ative o ambiente virtual:

source <env_name>/bin/activate

Ou:

source `pwd`/<env_name>/bin/activate

Agora corra

which python

Você deve ver o caminho completo para o seu diretório e <env_name>/bin/pythonsufixo

Para sair do virtualenv, execute:

deactivate 
Kohn1001
fonte
8

O Python agora vem com sua própria implementação de ambiente virtual, com o nome de "venv". Eu sugeriria usar isso, em vez de virtualenv.

Citando venv - docs ,

Descontinuado desde a versão 3.6: pyvenv foi a ferramenta recomendada para a criação de ambientes virtuais para Python 3.3 e 3.4, e foi descontinuado no Python 3.6.

Alterado na versão 3.5: O uso do venv agora é recomendado para a criação de ambientes virtuais.

Para o Windows, para iniciar o venv em algum projeto, abra o cmd:

python -m venv "c:\path\to\myenv"

(Sugiro usar aspas duplas no caminho do diretório, se houver algum espaço. Ex: "C: / My Dox / Diretório espaçado / Algo")

Uma vez configurado o venv, você verá algumas novas pastas dentro do diretório do projeto. Um deles seria "Scripts".

Para ativar ou invocar venv, você precisa:

C:\> <venv>\Scripts\activate.bat

Você pode desativar um ambiente virtual digitando "desativar" no seu shell. Com isso, você está pronto para instalar as bibliotecas específicas do seu projeto, que residirão na pasta "Lib".

================================ Editar 1 ================ ==================== O cenário que será discutido abaixo não é o originalmente solicitado, apenas adicionando isso no caso de alguém usar o vscode com extensão python

Caso você use o código vs com sua extensão python, você pode enfrentar um problema com o seu pylint, que aponta para a instalação global. Nesse caso, o pylint não poderá ver os módulos que estão instalados no seu ambiente virtual e, portanto, mostrará erros durante a importação.

Aqui está um método simples para superar isso.

cd Workspace\Scripts
.\Activate.ps1
code .

Basicamente, estamos ativando o ambiente primeiro e depois invocando o código vs para que o pylint inicie no ambiente e possa ver todos os pacotes locais.

Chama
fonte
Uso virtualenvno dia-a-dia de ambientes virtuais ( workon, etc.), mas a criação confiável de novos ambientes virtuais python3.xé a única maneira que achei que funcionava.
Bobble
6

Além das outras respostas, recomendo verificar qual instância do virtualenv você está executando:

which virtualenv

Se isso aparecer em / usr / local / bin, é possível - e até provável - que você tenha instalado o virtualenv (possivelmente usando uma instância de easy_tools ou pip) sem usar o gerenciador de pacotes do seu sistema (brew no caso do OP). Este foi o meu problema.

Anos atrás - quando eu era ainda mais ignorante - eu havia instalado o virtualenv e estava ocultando o virtualenv fornecido pelo pacote do meu sistema.

Depois de remover esse velho e virtualenv quebrado, meus problemas desapareceram.

sábio
fonte
6

Em python3.6 eu tentei python3 -m venv myenv, conforme a documentação, mas estava demorando tanto. Portanto, o comando muito simples e rápido é que python -m venv yourenv funcionou para mim no python3.6.

Sujeet Agrahari
fonte
5

No Mac, tive que fazer o seguinte para fazê-lo funcionar.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
Stryker
fonte
Para saber exatamente onde a sua versão python desejado é local de uso which python2.7ou which python3.5ou which python3.6, então, substituir o cerca--python=DIRECTORY
Santhosh
3

Se você instalar o python3 ( brew install python3) junto com o virtualenv burrito , poderá fazer mkvirtualenv -p $(which python3) env_name

Claro, eu sei que o virtualenv burrito é apenas um invólucro, mas me serviu bem ao longo dos anos, reduzindo algumas curvas de aprendizado.

Antony
fonte
3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> isso adicionará o caminho python3 ao seu ambiente virtual.

Hardik Gajjar
fonte
2

Funcionou para mim

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
Dadaso Zanzane
fonte
2

Para quem tem problemas ao trabalhar com o Anaconda3 (Python 3).

Você poderia usar

conda create -n name_of_your_virtualenv python=python_version 

Para ativar o ambiente (Linux, MacOS)

source activate name_of_your_virtualenv

Para Windows

activate name_of_your_virtualenv
jkhosla
fonte
1

Eu tentei todas as coisas acima, ainda não funcionou. Então, como força bruta, eu apenas reinstalei a anaconda, reinstalei o virtualenv ... e funcionou.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 
Aman Madan
fonte
1

Eu queria manter o python 2.7.5 como versão padrão no Centos 7, mas o python 3.6.1 em um ambiente virtual rodando ao lado de outros ambientes virtuais no python 2.x

Encontrei no link abaixo a melhor solução para a versão mais recente do python (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -environment-for-python-3 . Ele mostra as etapas para diferentes plataformas, mas as etapas básicas são

  1. Instale python3.x (se não estiver presente) para sua plataforma
  2. Instale python3.x-devel para sua plataforma
  3. Crie um ambiente virtual no python 3.x (por exemplo, $ python3.6 -m venv virenv_test_p3 /)
  4. Ative o ambiente de teste para python 3.x (por exemplo, fonte virenv_test_p3 / bin / enable)
  5. Instale os pacotes que você deseja usar no seu novo ambiente virtual python 3 e que são suportados (por exemplo, pip install Django == 1.11.2)
Gunnar Sigfusson
fonte
1

Os comandos simples abaixo podem criar um ambiente virtual com a versão 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

se você quiser a versão env virtual como 3.6

python3.6 -m venv <your env name>
Hariharan AR
fonte
1

Para aqueles que estão usando o pipenv e desejam instalar uma versão específica:

pipenv install --python 3.6
Vlad Bezden
fonte
0

Eu recebi o mesmo erro devido a um conflito com a instalação do miniconda3, portanto, quando você digita "which virtualenv" e se instalou o miniconda e está apontando para essa instalação, você pode removê-lo (se você gosta de mim e não se mudou) ainda) ou altere sua variável de ambiente para apontar para a instalação desejada.

PrincessPea
fonte
0

Na linha de comando do Windows, o seguinte funcionou para mim. Primeiro descubra onde estão os seus executáveis ​​python:

where python

Isso produzirá os caminhos para os diferentes python.exe no seu sistema. Aqui estavam os meus:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Portanto, para o Python3, ele estava localizado no primeiro caminho para mim, então eu CD para a pasta raiz do aplicativo onde desejo criar uma pasta do ambiente virtual. Em seguida, corro o seguinte, que inclui o caminho do meu executável Python3, nomeando meu ambiente virtual 'venv':

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

Em seguida, ative o ambiente virtual:

call venv\Scripts\activate.bat

Por fim, instale as dependências para este ambiente virtual:

pip install -r requirements.txt

Esse requisitos.txt pode ser preenchido manualmente se você conhecer as bibliotecas / módulos necessários para seu aplicativo no ambiente virtual. Se você teve o aplicativo em execução em outro ambiente, poderá produzir automaticamente as dependências executando o seguinte (cd na pasta do aplicativo no ambiente em que está trabalhando):

pip freeze > requirements.txt

Depois que você tiver os requisitos.txt "congelados", poderá instalar os requisitos em outra máquina ou ambiente limpo com o seguinte (após o CD na pasta do aplicativo):

pip install -r requirements.txt

Para ver sua versão do python no ambiente virtual, execute:

python --version

Então voilá ... você tem seu Python3 rodando em seu ambiente virtual. Saída para mim:

Python 3.7.2
Carlo Carandang
fonte