1 回答

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 穩定了?
添加回答
舉報