亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python venv 項目隨機停止能夠找到 python3 二進制文件

Python venv 項目隨機停止能夠找到 python3 二進制文件

蕭十郎 2023-08-15 16:39:04
我有一臺運行 Catalina 10.15.6 的 MacBook Pro。我一直遇到 python 環境失敗的問題venv。當我啟動 python 項目時,我在項目目錄中運行以下命令:python3 -m venv .這就創造了環境。我激活環境并. bin/activate運行which python3給了我這樣的東西:/Users/qotsa42/Projects/web/project_name/bin/python3換句話說,它使用虛擬環境中的 python 二進制文件。一切都很好。我的計算機上有幾十個項目正是通過這種方式創建的。有時,由于沒有明顯的原因并且沒有明顯的模式,激活腳本不再加載 python 二進制文件。例如,我只是嘗試為一個幾個月沒有接觸過的項目激活一個環境。which pip3給了我這個:/Users/qotsa42/Projects/web/project_name/bin/pip3但which python3給了我這個:/usr/local/bin/python3我一生都無法弄清楚是什么阻止了虛擬環境加載正確的 python 二進制文件。在這個特定的項目中,我使main.py文件可執行,并將 bash shebang 放在頂部,指向虛擬環境的二進制文件。當我運行腳本時,它給我這個:/Users/qotsa42/Projects/web/project_name/bin/python3: bad interpreter: No such file or directory操作系統升級或 Brew 升級可能會破壞我所有的虛擬環境,我現在才注意到,但這對我來說似乎很可疑。我感謝您提前提供的任何幫助。另外:刪除所有環境文件/目錄并重新安裝虛擬環境已經解決了這個問題,但如果可能的話,我寧愿不處理所有這些問題。問題似乎出在 python 二進制文件的 simlinks 中。python3.7該目錄中沒有二進制文件/usr/local/opt/python/bin,但有一個python3.8。運行/usr/local/opt/python/bin/python3.8 ./main.py有效,但它不會加載我通過安裝的模塊pip3——即我得到 ModuleNotFoundError: No module named 'pyodbc'運行python3 -m venv --upgrade .輸出:Error: [Errno 2] No such file or directory: '/Users/qotsa42/Projects/web/import_csv/bin/python3'
查看完整描述

1 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

你的激活腳本是什么樣的?它的主要目的是在 PATH 的開頭插入 Python。


這是我的:


VIRTUAL_ENV="/Users/myuser/kds2/py2/venv38"

export VIRTUAL_ENV


_OLD_VIRTUAL_PATH="$PATH"

PATH="$VIRTUAL_ENV/bin:$PATH"

在運行之前activate,我的 PATH 中有這個(我使用實用程序將其逐行分割):


0 /Users/myuser/.cargo/bin

1 /Users/myuser/.nvm/versions/node/v10.15.0/bin

2 /opt/local/bin

激活后


0 /Users/myuser/kds2/py2/venv38/bin

1 /Users/myuser/.cargo/bin

2 /Users/myuser/.nvm/versions/node/v10.15.0/bin

所以,基本上,它所做的一切都是在 PATH 上加上前綴$VIRTUAL_ENV/bin


我建議你看一下激活并嘗試看看它的作用。$VIRTUAL_ENV 有什么問題嗎?它確實被硬編碼到激活位置。


printf "\n$VIRTUALENV:$VIRTUALENV:\n"可能會給你一個線索,了解正在發生的事情。


VIRTUALENV=$(fnp $BASH_SOURCE/../..)同樣可以做到這一點,


現在,接下來是你的實際目錄是什么樣的:


如果我在cdvenv 的正上方,我有這樣的樹結構:


tree -d -L 2 venv


venv

├── bin

│   └── __pycache__

├── cx_Oracle-doc

├── include

├── lib

│   └── python3.6

├── man

│   └── man1

└── share

    ├── doc

    ├── jupyter

    └── man

現在,你的可能會有所不同。3.6可能是我的剩余。但有一個目錄結構,里面充滿了文件。


讓我們cd進入 bin,即 activate-ion 之后我的第一個 PATH 條目


和ls -l python


(venv38) myuser@bin$ ls -l python

lrwxr-xr-x  1 myuser  staff  9 May 29 13:15 python -> python3.8

這只是為了使其與版本無關。


讓我們ls -l python3.8


lrwxr-xr-x  1 myuser  staff  73 May 29 13:15 python3.8 -> /opt/local/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8


這就是 macports 放置 Python 的地方。如果你使用brew,它應該在類似的地方/usr/local/(我認為)。


是的,我可以啟動它:


(venv38) myuser@bin$ python3.8

Python 3.8.1 (default, Jan  5 2020, 21:32:35)

[Clang 10.0.1 (clang-1001.0.46.4)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

現在,其中任何一項都可能失敗,但需要通過步驟來驗證發生了什么:

  • 正在設置路徑

  • venv/bin 內容

  • 實際的 Python 被指向 venv/bin

然后你就可以推理出問題的原因。

而且,如果您想知道的是 3.7 與 3.8 的項目,也許您可以在那時rm python修復ln -s /usr/local/opt/python/bin/python3.8 python。

但在執行此操作之前,請查看 python 的時間戳,該時間戳可能指向 3.7。符號鏈接帶有鏈接創建的時間。這敲響了警鐘嗎?你當時安裝了什么東西嗎?也許與點有關?

現在,我已經讓 Python 3.6/3.7/3.8 共存了,基本上沒有問題。但如果可以的話,也許可以考慮標準化 1 個版本,除非你的 venv 穩定了?


查看完整回答
反對 回復 2023-08-15
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號