簡體   English   中英

如何將 pip3 用於 python 3.6 而不是 python 3.5?

[英]How to use pip3 for python 3.6 instead of python 3.5?

我正在使用 Kali dist,所以我已經安裝了 Python 2.7、3.5 和 3.6。 命令“python”和“pip”與 Python 2.7 相關聯。 但是 'python3' 使用 Python 3.6,而 pip3 正在為 Python 3.5 安裝包。
當我嘗試創建一個 venv 時:

pip3 -p python3.6 virtualenv myenv

我有一個錯誤:

no such option: -p

如何將 pip3 與 Python 3.6 而不是 Python 3.5 相關聯?

您的 pip 版本與您的 Python 版本密不可分,您不能告訴 pip “使用這個 Python”或“使用那個 Python”。 如果 pip3(使用 Python 3.X)和 python3(即 Python 3.Y)之間的版本不匹配,則意味着您的問題在於 Python 的多個重疊分布和奇怪配置的$PATH

如果您運行pip3 --version它會告訴您 pip3 關聯的站點包目錄和 Python 版本號。

如果你運行python3然后執行>>> import site; site.getsitepackages() >>> import site; site.getsitepackages() ,它應該打印你的python3正在使用的 site-packages 目錄。

如果這些不匹配,您就會遇到路徑問題,您需要發布有關您使用的操作系統、您使用的 Python 發行版以及您如何安裝它們的更多信息。

評論線程的更新/摘要:原始海報安裝了分發捆綁的 Python 3.6 和自行安裝的 Python 3.5。 他們路徑上的 pip3 與 Python 3.6(系統 Python)相關聯,而命令 python3 與 Python 3.5(他們自行安裝的 Python)相關聯。 分辨率:

運行which -a python3以查找 Python 3.5。 將 Python 3.5 的位置添加到您的$PATH (在.profile.bash_profile以使其永久化。)

您可以使用特定的 Python 版本顯式運行pip3腳本,方法是在它前面加上適當的python3.前綴python3. x命令:

ldo@theon:~> pip3 --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
ldo@theon:~> python3.5 $(which pip3) --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.5)

要在與 python3 關聯的版本關聯的同一版本位置安裝包,請使用以下命令:

python3 -m pip install [package]

選擇您希望您的包關聯的特定版本(因此您不會猜測以上內容):

python3.5 -m pip install [package]
python3.7 -m pip install [package]

另外,要小心,因為 pip3 可以指向不同的位置,並且不一定與 python3 二進制文件的位置匹配。 我剛剛在進行 pip3 安裝時發現了這一點,並且在運行 python3 時無法導入。

您也可以顯式調用 pip3.5、pip3.7 等,但老實說,我更喜歡使用python[version] -m pip install [package]方法,因為我知道它會將包安裝在與任何 python3 相關的位置。我正在使用的 x 二進制文件。

安裝Python3的時候看看有沒有這樣的注釋: Ignoring ensurepip failure: pip 9.0.1 requires 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  

這個答案描述了使用 ensurepip https://stackoverflow.com/a/38250442/1607937

另請參閱有關使用 pip3 安裝軟件包時openssl “Python 中的 SSL 模塊不可用”的相關信息

如果您只想使用一個版本的 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())

首先找到您要使用的正確版本的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可以。 閱讀venv文檔以了解推薦用法。 在您的情況下,您可能需要:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM