我一直将我所有的python2.7安装放在我的~/.local/目录下,这样我就不必在每次想做pip install的时候都使用sudo了。我的$PYTHONPATH上也有$HOME/.local/lib/python2.7/site-packages。多年来,这一直运行得很好,但现在我发现自己需要更频繁地运行python3程序。经过大量研究,在同一系统上处理python 2和3时,virtualenv似乎是最推荐的方式。但是我遇到了麻烦。我可以启动一个python3虚拟环境,但当我尝试使用pip安装新的库时,pip仍在搜索我的旧全局路径(即~/.local/),这是有意义的。但是,即使我从$PATH中删除~/.local/bin/目录并取消设置$PYTHONPATH,情况也是如此。以下是我采取的步骤:在激活virtualenv之前,首先检查预置。(我在Ubuntu 16.04 btw上)
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由于我从path中删除了~/.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路径?
发布于 2017-08-11 15:08:18
首先,安装要与python3一起使用的pip3。您可以使用以下命令安装它,然后使用pip3安装您的软件包。
sudo apt-get install python3 3-pip
发布于 2017-08-12 05:37:34
已解决
很久以前,当我最初设置我的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所以,尽管我从path中删除了$HOME/.local/。每当我启动一个新的终端时,这个包装器函数仍然会被调用。我是否在虚拟环境中是不是无关紧要。
解决方案?
被注释掉(或完全删除)的函数包装器修复了它。
https://stackoverflow.com/questions/45628802
复制相似问题