Como você define seu pythonpath em um virtualenv já criado?

106

Que arquivo edito e como? Criei um ambiente virtual.

TIMEX
fonte
verifique se ele aponta para os diretórios corretos. Se você ainda não tiver um, clique no botão Novo e crie-o.
11
Use o comando add2virtualenv .
s29
5
add2virtualenv é um virtualenvwrappercomando. Não faz parte virtualenv.
kojiro

Respostas:

124

EDITAR # 2

A resposta certa é a de @arogachev .


Se você deseja alterar o PYTHONPATHusado em um virtualenv, pode adicionar a seguinte linha ao bin/activatearquivo do virtualenv :

export PYTHONPATH="/the/path/you/want"

Dessa forma, o novo PYTHONPATHserá definido cada vez que você usar este virtualenv.

EDITAR: (para responder ao comentário de @RamRachum)

Para restaurá-lo ao seu valor original em deactivate, você pode adicionar

export OLD_PYTHONPATH="$PYTHONPATH"

antes da linha mencionada anteriormente e adicione a seguinte linha ao seu bin/postdeactivatescript.

export PYTHONPATH="$OLD_PYTHONPATH"
maravilhoso
fonte
1
Também será removido em deactivate?
Ram Rachum
1
Então, isso significa que um ambiente virtual recém-criado tem o padrão PYTHONPATH(o global) em vez do caminho local virtualenv?
ducin
6
Isso funcionou muito bem para mim, não estou usando o virtualenvwrapper. A única observação é que eu não tinha esse script bin / postdeactivate, rathere activate tinha uma função deactivate. A linha de código, portanto, deve ser colocada lá, tendo o cuidado de envolvê-la em uma instrução if como o resto das operações na função.
Niccolò
2
Parece estranho que o virtualenv não faça isso por padrão.
Seth,
2
Editar # 2 é uma mentira! :) A resposta certa é @ arjen-p-de-vries
Berriel
73

O comentário de @ s29 deve ser uma resposta:

Uma maneira de adicionar um diretório ao ambiente virtual é instalar o virtualenvwrapper (que é útil para muitas coisas) e depois fazer

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Se você deseja remover este caminho edite o arquivo myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

A documentação sobre virtualenvwrapper pode ser encontrada em http://virtualenvwrapper.readthedocs.org/en/latest/

A documentação específica sobre esse recurso pode ser encontrada em http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

tjb
fonte
6
para remover:add2virtualenv -d
thecheech
1
acabei de vincular essa resposta à minha, pois é muito melhor
ótimo,
27

Você pode criar um .ptharquivo que contém o diretório a ser pesquisado e colocá-lo no site-packagesdiretório. Por exemplo:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

O efeito é o mesmo que adicionar /some/library/patha sys.path, e permanecer local para a virtualenvinstalação.

Arjen P. De Vries
fonte
7
Eu realmente gosto dessa abordagem; não tão inconstante quanto adicionar linhas para ativar / desativar e não requer o uso do virtualenvwrapper. Se você preferir não invocar o python para encontrar o diretório de pacotes do site, ele está no caminho bastante previsível $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Documentos em arquivos .pth: docs.python.org/3.6/library/site.html
Alec
2
Eu não queria digitar um caminho absoluto, porque meus espaços de trabalho movem-se pelo meu sistema de arquivos. E, meu caminho de projeto tem espaços. Então, eu digitei o comando ligeiramente modificado: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdEntão eu desativei meu virtualenv e reativei. Agora eu podia executar o código do projeto que exigia saber onde estava o diretório do meu projeto.
Jim DeLaHunt
4
Essa é a resposta correta. Modificar o script fornecido pelo fornecedor ( /bin/activate) é uma má prática e instalar ferramentas de terceiros é inferior ao uso de forma integrada para conseguir o mesmo.
Vermelho
2
  1. Inicialize seu virtualenv
cd venv

source bin/activate
  1. Basta definir ou alterar seu caminho Python inserindo o seguinte comando:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. para verificar o caminho do python, insira em python:
   python

      \>\> import sys

      \>\> sys.path
Siyaram Malav
fonte
1

Eu modifiquei meu script de ativação para originar o arquivo .virtualenvrc, se ele existir no diretório atual, e para salvar / restaurarPYTHONPATH em ativar / desativar.

Você pode encontrar o activatescript corrigido aqui.. É um substituto para o script de ativação criado pelo virtualenv 1.11.6.

Então eu adicionei algo assim ao meu .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
André Laszlo
fonte
-20

Já foi respondido aqui -> Meu ambiente virtual (python) está causando a quebra de meu PYTHONPATH?

UNIX / LINUX

Adicione "export PYTHONPATH = / usr / local / lib / python2.0" ao arquivo ~ / .bashrc e forneça-o digitando "source ~ / .bashrc" OU ". ~ / .Bashrc".

WINDOWS XP

1) Vá para o painel de controle 2) Clique duas vezes em Sistema 3) Vá para a guia Avançado 4) Clique em Variáveis ​​de ambiente

Na janela Variáveis ​​do sistema, verifique se você possui uma variável chamada PYTHONPATH. Se você já tiver um, verifique se ele aponta para os diretórios corretos. Se você ainda não tiver um, clique no botão Novo e crie-o.

CÓDIGO DE PYTHON

Como alternativa, você também pode fazer abaixo seu código: -

import sys
sys.path.append("/home/me/mypy") 
Ravikiran
fonte
4
-1: endereça o PYTHONPATH do usuário, não o PYTHONPATH do virtualenv.
twneale