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

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

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

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.


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.


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.


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)

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

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 

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.


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.


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.


5

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

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere

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.


3

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


2

Funcionou para mim

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3

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

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$ 

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)

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>

1

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

pipenv install --python 3.6

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.


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
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.