我在Linux上工作,我有两个本地编译的Python3版本。
Python3.6配置为--prefix=${HOME}
,Python3.8配置为--prefix=${HOME}/python3.8
:
bli@naples:~$ which python3.6
/home/bli/bin/python3.6
bli@naples:~$ which python3.8
/home/bli/python3.8/bin/python3.8
相应的pip
命令都在我的~/.local/bin
目录中:
bli@naples:~$ which pip3.6
/home/bli/.local/bin/pip3.6
bli@naples:~$ which pip3.8
/home/bli/.local/bin/pip3.8
当我使用pip3.6
或pip3.8
安装python包时,这些库分别安装在/home/bli/.local/lib/python3.6/site-packages/
和/home/bli/.local/lib/python3.8/site-packages/
中。你知道吗
然而,二进制文件似乎安装在相同的~/.local/bin
目录中,这会导致文件被覆盖。你知道吗
例如,在pip3.8 install ipython
之后,先前安装的ipython3
命令被替换:
bli@naples:~$ ipython3 -c "import sys; print(sys.version)"
3.8.0a2 (default, Mar 6 2019, 14:42:50)
[GCC 5.4.0 20160609]
bli@naples:~$ head -1 /home/bli/.local/bin/ipython3
#!/home/bli/python3.8/bin/python3.8
我可以用pip3.6 install ipython --upgrade
返回上一个:
bli@naples:~$ ipython3 -c "import sys; print(sys.version)"
3.6.4 (default, Feb 14 2018, 18:35:27)
[GCC 5.4.0 20160609]
bli@naples:~$ head -1 /home/bli/.local/bin/ipython3
#!/home/bli/bin/python3.6
但是,这显然不是很方便。我不想每次在两个安装之间切换时都运行pip。你知道吗
我宁愿不必使用虚拟环境。我想要两个单独的python3装置。有没有可能避免这种干扰?
如果这是相关的,我有以下~/.pydistutils.cfg
文件:
bli@naples:~$ cat ~/.pydistutils.cfg
[install]
optimize=1
[build_ext]
include_dirs=${HOME}/include
library_dirs=${HOME}/lib
rpath=${HOME}/lib
user=1
我从源代码安装python的get_python.sh
脚本如下:
#!/usr/bin/env bash
prog="python"
progname="Python"
# It is possible to set the version in the `${VERSION}` environment variable to override the default.
# example: `VERSION="2.7.12" get_python.sh`
if [[ ${VERSION} ]]
then
version="${VERSION}"
else
version="2.7.12"
fi
if [[ ${RELEASE} ]]
then
release="${RELEASE}"
else
release=""
fi
mkdir -p ${HOME}/src
cd ${HOME}/src
# In case it's already there, remove it
rm -rf ${progname}-${version}*
# Download it
wget --continue https://www.python.org/ftp/${prog}/${version}/${progname}-${version}${release}.tar.xz
tar -xvJf ${progname}-${version}${release}.tar.xz
(
cd ${progname}-${version}${release}
[ ${PREFIX} ] || PREFIX=${HOME}
export PYTHONPATH=${PREFIX}
./configure --enable-shared --enable-optimizations --with-ensurepip=install --prefix=${PREFIX} CFLAGS="-O3 -march=native -fomit-frame-pointer" CPPFLAGS="-I${HOME}/include" LDFLAGS="-L${PREFIX}/lib -Wl,-rpath,${PREFIX}/lib"
make
make install
)
我使用的方法如下:
VERSION="3.6.4" get_python.sh
VERSION="3.8.0" RELEASE="a2" PREFIX="${HOME}/python3.8" get_python.sh
是的,这是完全可能的。使用
以及
Python将负责其余的工作:例如,包安装在单独的lib/pythonx.y/目录中。你知道吗
只要小版本不同,您就可以将一整组Python安装放在一起。你知道吗
这与
ipython
类似:(或
python3.6 -m jupyter console
)与Python3.8类似:
似乎可以通过设置特定于版本的
distutils/distutils.cfg
文件的[install]
部分的install-scripts
选项来解决问题(至少对于ipython3
)。你知道吗在本例中,为了让
pip3.8
将可执行文件安装在与python3.8
解释器本身相同的目录中,似乎可以使用以下方法:这可以通过在我的
get_python.sh
脚本中的make install
步骤之后添加以下内容来实现自动化:在
pip3.6 install upgrade no-deps force-reinstall ipython
和pip3.8 install upgrade force-reinstall ipython
之后,我有以下单独的可执行文件:我怀疑将
install-lib
选项设置为${PREFIX}/lib
可能会更干净,这样就可以使用与在make install
步骤中创建的目录相同的目录。你知道吗有关可用选项的详细信息,请参见https://bouktin.blogspot.com/2012/04/configure-pydistutilscfg-python.html。你知道吗
相关问题 更多 >
编程相关推荐