簡體   English   中英

pyenv-virtualenv 的問題:激活/停用虛擬環境時 Python 和 PIP 未更改

[英]Issues with pyenv-virtualenv: Python and PIP not changed when activating / deactivating virtual environment

我在我的 Ubuntu 16.04 VPS 上使用 Linuxbrew (Homebrew 2.2.5) 安裝了pyenv-virtualenv pyenv 版本是: 1.2.16 現在當我做這樣的測試時:

pyenv install 3.8.1
pyenv virtualenv 3.8.1 test
cd /.pyenv/versions/3.8.1/envs/test
pyenv local 3.8.1

然后輸入/離開/.pyenv/versions/3.8.1/envs/test不會激活停用虛擬環境,我在我的 shell 中看不到(test) username:~ 我還在那里創建了一個/home/users/test目錄和.python-version但仍然進入/離開目錄什么都不做。

根據文檔

如果 eval "$(pyenv virtualenv-init -)" 在您的 shell 中配置,pyenv-virtualenv 將在進入/離開包含 .python-version 文件的目錄時自動激活/停用 virtualenvs,該文件包含有效虛擬環境的名稱為顯示在 pyenv virtualenvs 的輸出中(例如,上面示例中的 venv34 或 3.4.3/envs/venv34)。 pyenv 使用 .python-version 文件來表示本地 Python 版本,可以使用 pyenv local 命令創建和刪除。


所以第一個問題是:為什么這不起作用? 為什么虛擬環境在進入/離開包含.python-version文件的目錄時沒有自動激活/停用?

此外,當我手動激活 virtualenv pyenv activate test然后檢查 Python 版本時,它會打印系統 Python 版本,而不是來自環境的版本: Python 3.8.1

python --version
Python 3.7.6

我只能通過像這樣直接引用 virtualenv shims Python 來獲得正確的 Python 版本:

which python
/home/andre/.pyenv/shims/python
/home/andre/.pyenv/shims/python --version
Python 3.8.1

無論何時激活 virtualenv“測試”,行為都是相同的。 我希望在激活“測試”命令后python --version返回Python 3.8.1

那么第二個問題:為什么在激活/停用虛擬環境時不切換pippython

這些是 pyenv 錯誤嗎? 還是我做錯了什么?

事實證明,為了在進入/離開目錄時自動激活/停用venv ,其中的.python-version文件必須包含venv name而不是與該venv關聯的Python version

所以執行: pyenv local 3.8.1創建一個.python-version文件,其中只包含 Python 版本3.8.1 然后進入/離開包含.python-version文件的目錄將設置/取消設置該文件中指定的 Python 版本,但不會激活/停用任何venv

要創建一個.python-version文件,它可以同時執行:激活虛擬環境並設置 Python 版本,命令應如下所示: pyenv local test其中test是使用以下命令創建的 venv: pyenv virtualenv 3.8.1 test

因此更改3.8.1以在.python-version進行test解決了該問題。 完成此操作后,當進入/離開包含.python-version目錄時, venv被激活/停用。

但是 Python 版本仍然沒有更改為與venv相關的venv (在本例中為3.8.1

然后我發現我的.profile中有兩行導致了這個問題:

alias python=/home/linuxbrew/.linuxbrew/bin/python3
alias pip=/home/linuxbrew/.linuxbrew/bin/pip3

刪除這些行后,一切都按預期工作。

我也有類似的問題。 解決方案是更改我放入~/.bashrc的條目。 我繼續導出變量export PYENV_ROOT="$HOME/.pyenv"並添加了行eval "$(pyenv init --path)"

完整運行以下命令,它將向您正在使用的用戶的~/.bashrc添加必要的條目。

read -r -d '' FILE_CONTENT << 'HEREDOC'
BEGIN

# >>>>>>
# pyenv configurations.

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)" # This only sets up the path stuff.
eval "$(pyenv init -)" # This makes pyenv work in the shell.
eval "$(pyenv virtualenv-init -)" # Enabling virtualenv so it works natively.
# <<<<<<

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" | tee -a ~/.bashrc

注意:在 Manjaro(Linux,基於 Arch)上測試。

謝謝! =D

[參考文獻: https://github.com/pyenv/pyenv-installer,https://github.com/pyenv/pyenv,https://realpython.com/intro-to-pyenv/,https: //github.com/pyenv/pyenv-virtualenv/issues/390#issuecomment-852599456,https://www.giters.com/pyenv/pyenv-virtualenv/issues/407]

暫無
暫無

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

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