pythonvirtualenv:为什么pip仍在寻找非$path?

2024-05-26 11:11:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直把我所有的python2.7安装都保存在~/.local/目录中,这样我就不必每次想做pip install时都sudo。我的$HOME/.local/lib/python2.7/site-packages上也有$PYTHONPATH。这已经很好地工作了很多年,但现在我发现自己需要更频繁地运行python3程序。经过大量研究,似乎virtualenv是在同一系统上处理python2和3的最推荐方法。但是我遇到了麻烦。我可以创建一个python3虚拟环境,但是当我尝试用pip安装新的libs时,我的旧全局路径(即~/.local/)仍然被pip搜索,这是有意义的。但是,如果我从$PATH中删除~/.local/bin/目录并取消设置$PYTHONPATH,情况就是这样。 以下是我采取的步骤: 在激活virtualenv之前先检查准备工作。(我在Ubuntu 16.04上)

maddoxw@firefly:~$ echo $PATH
/usr/local/cuda-8.0/bin:/home/maddoxw/.node_modules_global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/maddoxw/bin:/home/maddoxw/scripts
maddoxw@firefly:~$ echo $PYTHONPATH

maddoxw@firefly:~$ python --version
Python 2.7.12
maddoxw@firefly:~$ python3 --version
Python 3.5.2
maddoxw@firefly:~$ which pip

因为我从路径中删除了~/.local/bin目录,所以我可以确定pip不会被找到。而且,$PYTHONPATH仍然是空的。现在我创建我的virtualenv

maddoxw@firefly:~$ mkdir test && cd test/
mkdir: created directory 'test'
maddoxw@firefly:~/test$ python3 -m venv .env
maddoxw@firefly:~/test$ source .env/bin/activate
(.env) maddoxw@firefly:~/test$ echo $PATH
/home/maddoxw/test/.env/bin:/usr/local/cuda-8.0/bin:/home/maddoxw/.node_modules_global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/maddoxw/bin:/home/maddoxw/scripts
(.env) maddoxw@firefly:~/test$ echo $PYTHONPATH

(.env) maddoxw@firefly:~/test$ which python
/home/maddoxw/test/.env/bin/python
(.env) maddoxw@firefly:~/test$ python --version
Python 3.5.2
(.env) maddoxw@firefly:~/test$ which pip
/home/maddoxw/test/.env/bin/pip

很好。我的~/.local/仍不在我的$PATH上,$PYTHONPATH仍为空,python指向正确的路径和版本,pip指向正确的位置。现在让我们尝试pip install一个新的库。你知道吗

(.env) maddoxw@firefly:~/test$ pip install Cython
Requirement already satisfied: Cython in /home/maddoxw/.local/lib/python2.7/site-packages

为什么pip仍在寻找非$PATH路径?你知道吗


Tags: pippathtestecho路径envhomebin
2条回答

[已解决]

当我最初设置我的python2.7环境时,我为自己创建了一个围绕pip的方便的小函数包装器,这样我就不必每次想pip install时都输入 user

pip() {
  if [ "$1" = "install" -o "$1" = "bundle" ]; then
    cmd="$1"
    shift
    $HOME/.local/bin/pip $cmd  user $@
  else
    $HOME/.local/bin/pip $@
  fi
}

我把这个函数放在~/.bash.d/bash_functions 在我的~/.bashrc中我加了一行

[ -f ~/.bash.d/bash_functions ] && source ~/.bash.d/bash_functions

所以,尽管我从我的路径中删除了$HOME/.local/。每次我启动一个新终端时,这个包装器函数仍在被调用。我是否在虚拟世界里与天气无关。你知道吗

解决方案?你知道吗

注释掉(或完全删除)函数包装器修复了它。你知道吗

首先,安装pip3以与python3一起使用。您可以使用以下命令安装它,然后使用pip3安装软件包。你知道吗

sudo apt get install python3 pip

相关问题 更多 >