Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免不同版本的pip在同一目录中安装二进制文件?_Python_Pip - Fatal编程技术网

Python 如何避免不同版本的pip在同一目录中安装二进制文件?

Python 如何避免不同版本的pip在同一目录中安装二进制文件?,python,pip,Python,Pip,我在Linux上工作,我有两个本地编译的Python 3版本。 python3.6配置了--prefix=${HOME},python3.8配置了--prefix=${HOME}/python3.8: bli@naples:~$哪条蟒蛇3.6 /home/bli/bin/python3.6 bli@naples:~$哪条蟒蛇3.8 /home/bli/python3.8/bin/python3.8 相应的pip命令都位于my~/.local/bin目录中: bli@naples:~$3.6 /

我在Linux上工作,我有两个本地编译的Python 3版本。 python3.6配置了
--prefix=${HOME}
,python3.8配置了
--prefix=${HOME}/python3.8

bli@naples:~$哪条蟒蛇3.6
/home/bli/bin/python3.6
bli@naples:~$哪条蟒蛇3.8
/home/bli/python3.8/bin/python3.8
相应的
pip
命令都位于my
~/.local/bin
目录中:

bli@naples:~$3.6
/home/bli/.local/bin/pip3.6
bli@naples:~$3.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安装ipython
之后,先前安装的
ipython3
命令被替换:

bli@naples:~$ipython3-c“导入系统;打印(系统版本)”
3.8.0a2(默认,2019年3月6日,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安装ipython——升级
返回上一个:

bli@naples:~$ipython3-c“导入系统;打印(系统版本)”
3.6.4(默认,2018年2月14日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
[安装]
优化=1
[构建扩展]
include_dirs=${HOME}/include
库_dirs=${HOME}/lib
rpath=${HOME}/lib
用户=1
我从源代码安装python的
get_python.sh
脚本如下:

VERSION="3.6.4" get_python.sh
VERSION="3.8.0" RELEASE="a2" PREFIX="${HOME}/python3.8" get_python.sh
#/usr/bin/env bash
prog=“python”
progname=“Python”
#可以在`${version}`环境变量中设置版本以覆盖默认值。
#示例:`VERSION=“2.7.12”get_python.sh`
如果[${VERSION}]]
然后
version=“${version}”
其他的
version=“2.7.12”
fi
如果[${RELEASE}]]
然后
release=“${release}”
其他的
release=“”
fi
mkdir-p${HOME}/src
cd${HOME}/src
#如果已经存在,请将其移除
rm-rf${progname}-${version}*
#下载它
wget--继续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}
导出PYTHONPATH=${PREFIX}
./configure--enable shared--enable optimization--with ensurepip=install--prefix=${prefix}CFLAGS=“-O3-march=native-fomit帧指针”CPPFLAGS=“-I${HOME}/include”LDFLAGS=“-L${prefix}/lib-Wl,-rpath,${prefix}/lib”
制作
安装
)
我使用的方法如下:

VERSION="3.6.4" get_python.sh
VERSION="3.8.0" RELEASE="a2" PREFIX="${HOME}/python3.8" get_python.sh

是的,这是完全可能的。使用

python3.6 -m pip install <whatever>
(或
python3.6-mjupyter控制台

与Python 3.8类似:

# pick the one that works
python3.8 -m ipython
python3.8 -m jupyter console

通过设置特定于版本的
distutils/distutils.cfg
文件的
[install]
部分的
install scripts
选项,似乎可以解决该问题(至少对于
ipython3

在本例中,为了让
pip3.8
将可执行文件安装在与
python3.8
解释器本身相同的目录中,以下操作似乎起到了作用:

bli@naples:~$cat~/python3.8/lib/python3.8/distutils/distutils.cfg
[安装]
前缀=/home/bli/python3.8
安装脚本=/home/bli/python3.8/bin
这可以通过在my
get_python.sh
脚本中的
make install
步骤之后添加以下内容来实现自动化:

distutils_cfg=“${PREFIX}/lib/${prog}$(echo${VERSION}| cut-d”。“-f 1,2)/distutils/distutils.cfg”
echo“设置${distutils\u cfg}”
echo“[install]”>${distutils\u cfg}
echo“prefix=${prefix}”>${distutils\u cfg}
echo“安装脚本=${PREFIX}/bin”>>${distutils\u cfg}
pip3.6安装--升级--无deps--强制重新安装ipython
pip3.8安装--升级--强制重新安装ipython
之后,我有以下单独的可执行文件:

bli@naples:~$head-1.local/bin/ipython3
#!/home/bli/bin/python3.6
bli@naples:~$head-1蟒蛇3.8/bin/ipython3
#!/home/bli/python3.8/bin/python3.8
我怀疑将
install lib
选项设置为
${PREFIX}/lib
,以便使用与
make install
步骤中创建的目录相同的目录可能会更干净


有关可用选项的更多详细信息,请参阅。

“我不希望使用虚拟环境”=>为什么???VENV易于安装,易于使用,并且它们可以解决相当多的兼容性问题…仅凭其自身,
pip
确实不够聪明,无法实现您所需的功能。您可能会查看一个工具,比如如果您坚决反对使用VirtualNVS。@9769953我可能错了,但您所描述的似乎只涉及库,而不是二进制文件。实际上,有一个问题是,许多安装都不会在其自身旁边创建单独的3.8可执行文件。pip有,Python本身也有,但仅此而已。@bli它实际上取决于您安装的内容。您需要的包可能都有这样的二进制文件(通常,这个“二进制文件”本身是一个5到10行的Python脚本,围绕着对包本身的调用。请参阅
pip
本身。感谢您指出我可以
# pick the one that works
python3.8 -m ipython
python3.8 -m jupyter console