如何将pip3用于Python3.6而不是Python3.5?

如何将pip3用于Python3.6而不是Python3.5?,python,python-3.x,pip,Python,Python 3.x,Pip,我使用的是Kali dist,所以我已经安装了Python2.7、3.5和3.6。命令“python”和“pip”与python2.7相关联。但是“python3”使用的是python3.6,而pip3正在为python3.5安装软件包。 当我尝试创建venv时: pip3 -p python3.6 virtualenv myenv 我有一个错误: no such option: -p 如何将pip3与python3.6而不是python3.5相关联?您的pip版本与您的Python版本密不

我使用的是Kali dist,所以我已经安装了Python2.7、3.5和3.6。命令“python”和“pip”与python2.7相关联。但是“python3”使用的是python3.6,而pip3正在为python3.5安装软件包。
当我尝试创建venv时:

pip3 -p python3.6 virtualenv myenv
我有一个错误:

no such option: -p

如何将pip3与python3.6而不是python3.5相关联?

您的pip版本与您的Python版本密不可分,您不能告诉pip“使用此Python”或“使用该Python”。如果pip3(使用python3.X)和python3(作为python3.Y)之间存在版本不匹配,这意味着您的问题在于Python的多个重叠发行版和配置怪异的
$PATH

如果运行
pip3--version
,它将告诉您与pip3关联的站点包目录和Python版本号

如果您运行
python3
,然后执行
>>导入站点;getsitepackages()
,它应该打印您的
python3
正在使用的站点包目录

如果这些不匹配,您就有路径问题,您需要发布更多关于您所使用的操作系统、使用的Python发行版以及如何安装它们的信息

更新/评论线索摘要:最初的海报上安装了一个发行版捆绑的Python 3.6和一个自行安装的Python 3.5。路径上的pip3与python3.6(系统Python)相关联,而命令python3与python3.5(其自行安装的Python)相关联。决议:


运行
which-a python3
查找python3.5。将Python 3.5的位置添加到
$PATH
。(在
.profile
.bash\u profile
中执行此操作以使其永久化。)

首先找到要使用的python的正确版本:

$ which -a python3.6
/usr/bin/python3.6
然后直接调用python实例,例如

$ /usr/bin/python3.6 -m venv
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR ...]
venv: error: the following arguments are required: ENV_DIR
接下来,
pip
不会创建虚拟环境。模块
venv
不工作。阅读推荐用法。在您的情况下,您可能需要:

$ /usr/bin/python3.6 -m venv myenv

您可以使用特定的Python版本显式运行
pip3
脚本,方法是在脚本前面加上相应的
python3.
x命令:


安装Python3时,请查看是否有如下注释:
忽略EnsureIP故障:pip 9.0.1需要SSL/TLS

您可能会在日志中看到如下条目:

INFO: Can't locate Tcl/Tk libs and/or headers

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _dbm                  _gdbm              
_lzma                 _sqlite3              _ssl               
_tkinter              readline                                 
To find the necessary bits, look in setup.py in detect_modules() for the     module's name.

The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
atexit                pwd                   time  
此答案描述了如何使用EnsureIP

另请参见有关openssl的内容

要在与python3关联的版本关联的同一版本位置安装软件包,请使用以下命令:

python3 -m pip install [package]
要选择希望包与之关联的特定版本(因此您不必猜测上述内容),请执行以下操作:

另外,要小心,因为pip3可以指向不同的位置,并且可能不一定与python3二进制文件的位置相匹配。我刚刚发现,当我安装pip3时,它在运行python3时无法导入


您也可以显式地调用pip3.5、pip3.7等,但老实说,我更喜欢使用
python[version]-m pip install[package]
方法,因为我知道它会将包安装在与我正在使用的任何python3.x二进制文件关联的位置。

如果您只想使用一个版本的python,可能需要创建一个别名。在~/.bashrc文件末尾添加此行:

alias pip='python3.6 -m pip'
然后,运行
source~/.bashrc
,现在
pip--version
将显示如下内容:

pip xx.x.x from /usr/lib/python3/dist-packages/pip (python 3.6)
您可以将第#1行从/usr/bin/pip3更新为#/usr/bin/python3.8如下

#!/usr/bin/python3.8
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

pip3——来自/usr/lib/python3/dist包(python3.5)的版本
pip9.0.1导入站点;site.getsitepackages()
['/usr/local/lib/python3.6/site packages']
是的,您的pip3和python二进制文件不匹配。如何以及为什么安装了两个版本的Python 3?您应该卸载两个版本的Python 3,然后重新安装其中一个版本。请更新您的帖子,告诉我您是如何安装这两个版本的Python的,这样我就可以帮助您了解如何卸载它们。我记不清了,但我认为Python3.6是在dist中构建的,Python3.5是我自己安装的。我这样认为,因为我读到内置版本没有PIP,所以在Linux系统上安装多个版本的Python是很有可能的,而且没有问题。我目前在我的主要Debian机器上有从3.2到3.6的版本。这对于测试我编写的代码的兼容性很方便。@LawrenceD'Oliveiro当然,如果您知道自己在做什么,并且需要python 3.5和3.6(并且有一个管理不可避免的$PATH和$PYTHONPATH冲突的策略),那就可以了。OP显然不需要3.5和3.6并排使用。
pip3-vpip9.0.1来自/usr/lib/python3/dist包(python3.5)
python3.6$(哪一个pip3)--version
回溯(最近一次调用):
文件/usr/bin/pip3“,第9行,在pip import main的
ModuleNotFoundError:没有名为'pip'的模块virtualenv的参数应该是'-p python3.6'的可能副本,而不是PIP3如果其中一个答案解决了您的问题,请将其标记出来。另请参阅此处提供的信息和建议:如果您还不是Linux pro,请不要使用Kali。这一点再怎么强调也不过分。
which-a
在macOS和Linux上工作。你在使用哪个操作系统?正如我在post-Kali LinuxOh中所写的,对不起,这是我的错,我只是写错了命令<代码>哪个-python3.6
/usr/local/bin/python3.6/usr/bin/python3.6
pip xx.x.x from /usr/lib/python3/dist-packages/pip (python 3.6)
#!/usr/bin/python3.8
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())