簡體   English   中英

python virtualenv 不使用正確版本的python

[英]python virtualenv does not use correct version of python

我正在創建一個需要我使用 python2.7.6 的 Django 應用程序。 我的系統安裝了 python3.4.1,所以我必須使用安裝了 python2.7 的 virtualenv。 我使用 Pycharm 安裝了這樣一個 virtualenv 並將其命名為 django_python_2.7 但是當我在終端中激活它並運行“python”時,它仍然顯示它正在使用系統的 python3.4.1:這是我所做的:

  1. 激活環境:

    source django_python_2.7/bin/activate

  2. 運行python ,它顯示:

    Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21) ---> 這是系統級 python 而不是安裝在 virtualenv 中的

但是,當我運行which python ,它顯示了指向 virtualenv 的 python 版本的正確路徑:

/Users/calvinmwhu/....../django_python_2.7/bin/python

當我顯式運行安裝在該 virtualenv 中的 python 版本時:

django_python_2.7/bin/python

它顯示了正確的版本:

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 

我不知道是怎么回事。 我正在 Pycharm IDE 中開發這個應用程序,但我真的很喜歡在終端中執行命令。 但是在終端中,virtualenv 沒有使用正確版本的 python..為什么在 virtualenv 中運行一個簡單的“python”命令仍然默認為系統的 python ?

有人可以提供一些提示嗎? 是否有必要更改PATH變量以使其包含 virtualenv 的 python 的路徑?

如果要更改 virtualenv 中使用的PYTHONPATH ,可以django_python_2.7/bin/activate添加到 virtualenv 的django_python_2.7/bin/activate文件中

export PYTHONPATH="/path/to/python"
export OLD_PYTHONPATH="$PYTHONPATH"

要在停用時恢復其原始值,您可以django_python_2.7/bin/postdeactivate添加到django_python_2.7/bin/postdeactivate腳本中。

export PYTHONPATH="$OLD_PYTHONPATH"

否則,創建新的env使用

virtualenv -p /usr/bin/python2.7 django_python_2.7

我發現了同樣的問題...

就像提到的@skyline75489:

我忘記了我曾經為我的 python3 可執行文件聲明了一個別名。
我在我的主目錄中的 .bash 文件中找到了它並刪除了它。
我的虛擬環境一切正常。

如果您更改了venv的路徑或命名了 venv 目錄的任何父文件夾,那么這將破壞配置的路徑,如果是這種情況,您有兩個選擇:

  1. 重新創造它

    • 使用以下命令創建一個 requirements.txt 文件: pip freeze > requirements.txt

    • 刪除venv目錄: rm -r old-vnev/

    • 使用正確的名稱創建一個新的 virtualenv: python -m venv new-venv
    • 激活新的 virtualenv: source new-venv/bin/activate
    • 從requirements.txt安裝包: pip install -r requirements.txt
  2. 另一種更簡單的方法

    • 搜索所有出現的字符串old/path/to/your/venv/
    • correct/path/to/your/venv/替換它們

在該source new-venv/bin/activate將再次按預期工作。

希望這有幫助!

如果它對其他人有幫助:如果您更改了venv文件夾的路徑(例如更改父文件夾),就會發生這種情況。 這是我的問題。

重新創建您的 virtualenv 將修復它,因為您應該希望創建一個requirements.txt來重建您的 virtualenv。

這甚至可能是 OP 的根本原因。

仔細檢查你的路徑。 我最近遇到了這樣的問題which python從激活的 virtualenv 中運行which python仍會返回默認系統版本( /usr/bin/python )。 但是,如果我從 virtualenv 中直接運行指定二進制文件的腳本( ./venv/bin/python等),它會按預期工作,因此似乎所有依賴項都已正確安裝。

問題是我構建所有內容移動了父 virtualenv 目錄。 這意味着所有 virtualenv 路徑都指向不再有效的原始位置,並且 python 正確默認為默認系統二進制文件。

我使用這樣的bash腳本:

$ source venv/bin/activate
$ alias vpython=$VIRTUAL_ENV/bin/python3

並在想要在虛擬環境中使用 python 可執行文件時使用vpython 檢查您在python實際使用的可執行文件的一個好方法如下:

>>> import sys
>>> print(f'executable \033[0;33;40m{sys.executable}\033[0m')

在我的情況下,來自 virtualenv 的系統更新符號鏈接不知何故被破壞並切換到默認系統 python 版本。 解決方案是用正確的符號鏈接替換符號鏈接。

  1. 如果您在內部,請通過以下方式停用虛擬環境:

    deactivate

  2. 更改 virtualenv python 符號鏈接:

    ln -s /your/wanted/python/bin/python /your/virtualenv/bin/python

  3. 再次啟動 virtualenv,它應該使用正確的 python 版本。

如果您不確定您的 python 在哪里,那么您可以通過以下方式對其進行本地化: which python3

我有一個類似的問題。 但是我有它,因為我已經將我的 env 文件夾移到了另一個地方。 所以,如果你這樣做了,只需去激活bin 文件夾中的文件並更改 VIRTUAL_ENV="CurrentPathToYourEnvFolder" (它是文件中的第 40 行)

暫無
暫無

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

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