簡體   English   中英

使用 Pip 安裝包到 Anaconda 環境

[英]Using Pip to install packages to Anaconda Environment

康達 4.2.13 MacOSX 10.12.1

我正在嘗試將pip中的軟件包安裝到使用 anaconda 創建的全新環境(虛擬)中。 在 Anaconda 文檔中,它說這很好。 它的完成方式與 virtualenv 相同。

激活要放置程序的環境,然后pip安裝程序...

我在 Ananconda 中創建了一個空環境,如下所示:

conda create -n shrink_venv

激活它:

source activate shrink_venv

然后我可以在終端中看到我正在我的 env (shrink_venv)中工作。 問題來了,當我嘗試使用pip安裝 package 時:

(shrink_venv): pip install Pillow

Requirement already satisfied (use --upgrade to upgrade): Pillow in /Library/Python/2.7/site-packages

所以我可以看到它認為系統范圍的 package 滿足了要求。 所以看起來環境工作不正常,絕對不像文檔中所說的那樣。 我在這里做錯了嗎?

請注意,我知道您可以對軟件包使用conda install ,但是我對 anaconda 的 Pillow 有疑問,所以我想從pip獲得它,因為文檔說這很好。

Output which -a pip

/usr/local/bin/pip
/Users/my_user/anaconda/bin/pip

** 更新 ** 我看到這是很常見的問題。 我發現 conda env 不能很好地與 PYTHONPATH 配合使用。 即使您使用 conda 環境,系統似乎總是在 PYTHONPATH 位置中查找。 現在,我在使用 conda 環境時總是運行unset PYTHONPATH ,而且效果更好。 我在Mac上。

對於遇到這種情況的其他人,我發現這是最直接的解決方案:

  1. 運行conda create -n venv_nameconda create -n venv_name conda activate venv_name ,其中venv_name是您的虛擬環境的名稱。

  2. 運行conda install pip 這會將 pip 安裝到您的 venv 目錄。

  3. 找到您的 anaconda 目錄,並找到實際的 venv 文件夾。 它應該類似於/anaconda/envs/venv_name/

  4. 通過執行/anaconda/envs/venv_name/bin/pip install package_name安裝新軟件包。

現在應該使用該虛擬環境的 pip 成功安裝軟件包!

您所要做的就是打開 Anaconda Prompt 並輸入

pip install package-name

會自動安裝到anaconda環境,無需使用

conda install package-name

由於某些 conda 軟件包可能缺乏超時支持,因此需要使用 pip 進行安裝,這是一種方法

如果您在 anaconda 中安裝了 pip,則可以在 jupyter notebook 或鏈接到 anaconda 的 python shell 中運行以下命令

pip.main(['install', 'package-name'])

使用pip.__version__檢查您的 pip 版本。 如果是10.xx或以上版本,那么用這行代碼安裝你的python包

subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'package-name'])

在您的 jupyter notebook 中,您可以通過這種方式在單元格中通過 pip 安裝 python 包;

!pip install package-name

或者您可以使用與 anaconda 關聯的 python 版本

!python3.6 -m pip install package-name

我通過以下方式解決了這個問題:

如果你有一個非 conda pip 作為你的默認 pip 但 conda python 是你的默認 python (如下)

>which -a pip
/home/<user>/.local/bin/pip   
/home/<user>/.conda/envs/newenv/bin/pip
/usr/bin/pip

>which -a python
/home/<user>/.conda/envs/newenv/bin/python
/usr/bin/python

然后,而不是僅僅調用pip install <package> ,您可以將模塊標志-m與 python 一起使用,以便它使用 anaconda python 進行安裝

python -m pip install <package>

這會將包安裝到 anaconda 庫目錄而不是與(非 anaconda)pip 關聯的庫目錄

這對我有用(參考圖片鏈接)

  1. 打開蟒蛇
  2. 在主頁下方的左側窗格中選擇環境
  3. 在您選擇的位置右側和“搜索環境”欄下方,您應該看到 base(root)。 點擊它
  4. 應該會出現一個指向右側的三角形,單擊它並選擇“打開終端”
  5. 在此處使用常規 pip install 命令。 無需指向環境/路徑

為了將來參考,如果您碰巧已經滿足了某個要求,您可以找到您的軟件包下載到的文件夾。 如果您在終端中向上滾動,您可以看到它。 它應該是這樣的:需求已經滿足,然后是路徑

[pip 安裝蟒蛇 ]

如果在創建 conda 環境時沒有添加 pip

conda create -n env_name pip

並且也沒有在環境中安裝 pip

source activate env_name
conda install pip

那么你得到的唯一 pip 就是系統 pip,它將全局安裝包。

正如您在本期中看到的 Bus ,即使您執行了上述任何一個過程,conda 環境中的 pip 行為仍然是未定義的。

為了確保使用安裝在 conda 環境中的 pip 而不必輸入冗長的/home/username/anaconda/envs/env_name/bin/pip ,我編寫了一個 shell 函數:

# Using pip to install packages inside conda environments.
cpip() {
    ERROR_MSG="Not in a conda environment."
    ERROR_MSG="$ERROR_MSG\nUse \`source activate ENV\`"
    ERROR_MSG="$ERROR_MSG to enter a conda environment."

    [ -z "$CONDA_DEFAULT_ENV" ] && echo "$ERROR_MSG" && return 1

    ERROR_MSG='Pip not installed in current conda environment.'
    ERROR_MSG="$ERROR_MSG\nUse \`conda install pip\`"
    ERROR_MSG="$ERROR_MSG to install pip in current conda environment."

    [ -e "$CONDA_PREFIX/bin/pip" ] || (echo "$ERROR_MSG" && return 2)

    PIP="$CONDA_PREFIX/bin/pip"
    "$PIP" "$@"
}

希望這對你有幫助。

python -m pip install Pillow

將使用激活的當前 Python 的 pip

source activate shrink_venv

對於那些希望使用 pip 在 conda 中安裝少量軟件包然后使用的人,

sudo $(which pip) install <instert_package_name>

為我工作。

說明

無論如何,對我來說, which pip對於找到 conda env pip 路徑來說是非常可靠的。 但是,當使用sudo ,這似乎會重定向路徑或以其他方式破壞它。

使用$(which pip)獨立於sudo或任何命令執行此操作,類似於在 Linux 中運行/home/<username>/(mini)conda(3)/envs/<env_name>/pip 這是因為$()是單獨運行的,並且文本輸出添加到外部命令中。

以上所有答案主要基於virtualenv的使用。 我只是全新安裝了 anaconda3,並且沒有安裝任何 virtualenv。 所以,我找到了一個更好的替代方案,而無需考慮創建 virtualenv。

如果你在 linux 中安裝了很多 pip 和 python 版本,那么首先運行下面的命令來列出所有安裝的 pip 路徑。

點子在哪里

你會得到類似這樣的輸出。

pip: /usr/bin/pip /home/prabhakar/anaconda3/bin/pip /usr/share/man/man1/pip.1.gz

復制要用於安裝包的 pip 路徑,並在以下命令中 sudo 替換/home/prabhakar/anaconda3/bin/pip后粘貼它。

須藤/home/prabhakar/anaconda3/bin/pip install <package-name>

這對我來說效果很好。 如果安裝有問題,請留言。

如果您使用的是 Windows 操作系統,請打開Anaconda Prompt並輸入activate yourenvname

如果您使用的是 mac 或 Linux 操作系統,請打開終端並輸入source activate yourenvname

yourenvname這里是您想要安裝 pip 包的所需環境

鍵入上述命令后,您必須在控制台輸出中看到您的環境名稱從base更改為您鍵入的環境yourenvname (這意味着您現在處於所需的環境上下文中)

然后你需要做的就是普通的pip install命令,例如pip install yourpackage

通過這樣做,pip 包將安裝在您的 Conda 環境中

取決於您如何配置 PATH 環境變量。 當您的 shell 解析對 pip 的調用時,它將找到的第一個 bin 是哪個?

(test)$ whereis pip
pip: /home/borja/anaconda3/envs/test/bin/pip /home/borja/anaconda3/bin/pip

確保 anaconda 安裝中的 bin 文件夾位於 /usr/lib 之前(取決於您安裝 pip 的方式)。 所以一個例子:

(test) borja@xxxx:~$ pip install djangorestframework
....
Successfully installed asgiref-3.2.3 django-3.0.3 djangorestframework-3.11.0 pytz-2019.3 sqlparse-0.3.1

(test) borja@xxxx:~$ conda list | grep django
django                    3.0.3                    pypi_0    pypi
djangorestframework       3.11.0                   pypi_0    pypi

我們可以看到 djangorestframework 安裝在我的測試環境中,但是如果我檢查我的基礎:

(base) borja@xxxx:~$ conda list | grep django

它是空的。

我個人喜歡使用.pam_environment處理我所有的 PATH 配置,這里有一個例子:

(base) borja@xxxx:~$ cat .pam_environment
PATH DEFAULT=/home/@{PAM_USER}/anaconda3/bin:${PATH}

一顆額外的彗星。 您安裝 pip 的方式可能會產生問題:

  • 您應該使用: conda install pip --> 使用 pip 安裝的新軟件包將添加到 conda 列表中。

  • 不應該使用: sudo apt install python3-pip --> 新軟件包不會添加到 conda 列表中(因此不受 conda 管理),但您仍然可以使用它們(可能發生沖突)。

好吧,我嘗試了所有上述方法。 沒有一個對我有用。 以下對我有用:

  1. 激活您的環境
  2. https://pypi.org/simple//手動下載 .whl 包
  3. 在激活環境的情況下,導航到從命令行下載 .whl 的文件夾
  4. 執行:pip install package_name_whatever.whl

我在 anaconda 上安裝非 conda 包時遇到問題,我在這里遵循了最喜歡的答案,但進展並不順利(可能是因為我的 anaconda 在 F 目錄中,而 env created 在 C 中,而 bin 文件夾未創建,我不知道,但它沒有用)。

根據 anaconda pip 已經安裝(可以在 anaconda 提示符下使用命令“ conda list ”找到),但是沒有安裝 pip 包,所以這就是我所做的,我再次安裝了 pip 然后 pip 安裝了該包。

conda install pip
pip install see

see是一個非 conda 包。

我在這里看到了很多很好的答案,但仍然想分享對我有用的答案,尤其是當您從 pip-era 切換到 conda-era 時。 按照此操作,您可以使用condapip安裝任何軟件包。

背景

  • PIP - 僅限 Python 包管理器
  • Conda - 包括 Python 在內的多種語言的包和環境管理器

每次創建新的 conda 環境時都默認安裝 Pip

# this installs pip for your newly created environment
conda create -n my_new_env pip 

# activate your new conda environment
conda activate my_new_env

# now you can install any packages using both conda and pip
conda install package_name

#or
pip install package_name

這使您可以靈活地在 conda 環境中安裝任何軟件包,即使它們在 conda 中不可用(例如 wordcloud)

conda activate my_new_env

# will not work as wordcloud is not available in conda
conda install wordcloud

# works fine
pip install wordcloud

如果你只是想有一個暢達的安裝。 只需從 PATH 變量中刪除所有其他 python 路徑。

只離開:

C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Library\bin

這允許您只使用pip install *它將直接安裝到您的 conda 安裝中。

我知道最初的問題是關於 MacOS 下的 conda。 但我想分享我在 Ubuntu 20.04 上的經驗。

就我而言,問題是由於~/.bashrc定義的別名造成的: alias pip='/usr/bin/pip3' 該別名優先於其他所有內容。

因此,出於測試目的,我刪除了運行unalias pip命令的別名。 那么活動conda環境對應的pip就已經正常執行了。

同樣的問題適用於python命令。

只需activate shrink_venv 我嘗試創建新環境,我的conda安裝不允許我在開始時使用source。

卸載重復的 python 安裝。 只需保留 anaconda 並使用此處指定的所需 Python 版本創建一個 env: https : //docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html 然后你的 python 和 pip 版本會隨着你在 envs 之間切換而改變。

今天,我已經看了這個答案和許多其他答案幾個小時,但憑借 30 年的編程經驗,我無法弄清楚這一點。

我跑了:

conda create -n myenv python=3.9
conda activate myenv

並且無法使用 pip。 但是,在 myenv2、myenv3、myenv4 等其他環境中,它可以正常工作。

我得到了可怕的 urllib3 httpsconnection 錯誤。

所以認為它必須是缺少 urllib3 錯誤或其他原因。 事實證明,它比那更險惡。 不幸的是,它適用於其他環境,對我來說,我認為這與我在 Windows 10 和 WSL2 上使用 Debian 的事實有關。 修復很簡單:

rm -rf $HOME/.cache

pip 緩存是從先前安裝的同一環境中損壞的。 可能是因為我在 conda base 上運行了更新並進行了分發升級。 因為我想使用帶有 flask 的 WSGI 環境來運行帶有 apache2 的生產系統,所以我希望始終擁有相同的 conda 實例名稱。 所以這是一個必須解決的問題!

暫無
暫無

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

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