virtualenv沒有將.py(w)
文件與virtualenv的Python可執行文件的版本關聯起來,原因是什麼?這對於Windows上的virtualenv來說似乎是一個理想的任務,考慮到Windows上沒有像shebang這樣的機制。爲什麼Windows上的virtualenv與virtualenv版本的Python可執行文件關聯.py/.pyw/.pyo/.pyc文件?
回答
文件類型關聯在Windows註冊表中處理。 virtualenv激活腳本將不得不修改註冊表項,並且停用腳本需要恢復以前的值(或者冒險破壞關聯)。
如果激活virtualenv,打開第二個cmd.exe實例並激活其他virtualenv,會發生什麼情況?除非您以正確的順序禁用它們,否則註冊表項的存儲值將會丟失。
我不是virtualenv的開發者,我想說潛在的問題遠遠超過了微小的好處。
較短的答案可能是「這是複雜和痛苦的,沒有人希望該功能足以實現它」。 – Velociraptors 2011-02-03 22:22:31
我所有的Python開發目前都在Linux上,但我正在研究Windows,這是我如何找到這個問題。我的答案將是一個可操作的:
在提示時,我總是輸入python <scriptName>.py
而不是輸入<scriptName>.py
。如果你採用這種習慣,virtualenv會不會爲你執行正確的Python?
Python啓動器支持自定義命令。像這樣一款LOCALAPPDATA:創建$ ENV一個py.ini文件
[commands]
venvpython=C:\Path\To\Virtualenv\Scripts\python.exe
現在,你可以在#使用venvpython!你的腳本行:
#!venvpython
import sys
print(sys.executable)
virtualenvwrapper-win確實與當前活動的virtualenv副Python文件:
注意,批處理腳本
pyassoc
需要提升的命令提示符或UAC被禁用。此腳本將.py 文件與python.bat
關聯起來,這是一個簡單的批處理文件,根據您是否擁有活動的virtualenv來調用正確的python.exe
。這個 允許你從命令行調用python腳本,並調用 正確的python解釋器。看看源代碼 - 這是 令人難以置信的簡單,但我發現處理條件 文件擴展名關聯的最佳途徑。
python.bat
看起來像這樣
@echo off
if defined PYTHONHOME (
goto MAIN
)
FOR /F "tokens=*" %%i in ('whereis.bat python.exe') do set PYTHONHOME=%%~dpi
SET PYTHONHOME=%PYTHONHOME:~0,-1%
:MAIN
SETLOCAL EnableDelayedExpansion
if defined VIRTUAL_ENV (
set PY="%VIRTUAL_ENV%\Scripts\python.exe"
) else (
set PY="%PYTHONHOME%\python.exe"
)
ENDLOCAL & %PY% %*
:END
UPDATE
現在,可以 - 看How to associate Python scripts with active virtualenv?
- 1. 的virtualenv activate_this與不同的Python版本
- 2. virtualenv與此係統或可執行文件不兼容。
- 3. Virtualenv Python Windows
- 4. Python + Django + VirtualEnv + Windows
- 5. 匹版本的virtualenv
- 6. 設置Python特定版本的Python virtualenv
- 7. 在Windows上使用virtualenv -p(和virtualenvwrapper-win)的多個python版本
- 8. 關於可執行文件與Windows
- 9. 在Requirements.txt中爲Virtualenv指定Python版本
- 10. 在早期版本上運行的Python可執行文件
- 11. 爲什麼python virtualenv命令在Windows 10上失敗?
- 12. Ansible - Virtualenv可執行文件嘗試python3.5時沒有找到
- 13. 使用特定版本的Python創建Windows Python virtualenv
- 14. 在Windows上的virtualenv中安裝python-ldap
- 15. python virtualenv:爲什麼我仍然可以在clean/new virtualenv中導入舊模塊
- 16. Django和virtualenv文件夾
- 17. 如何爲Windows可執行文件製作Python腳本插件?
- 18. 瞭解與python相關的virtualenv
- 19. VIRTUALENV沒有與本系統或兼容的可執行
- 20. virtualenv文件夾中的奇怪「本地」文件夾
- 21. Jython 2.5和windows上的virtualenv
- 22. 使用virtualenv安裝不同python版本的軟件包錯誤
- 23. VIRTUALENV不同的Python版本不能在Windows工作
- 24. 無法使用virtualenv和cx_Freeze將pygame轉換爲可執行文件
- 25. Python Virtualenv
- 26. virtualenv python中的預期行爲是什麼?
- 27. 錯誤設置的virtualenv文件夾
- 28. Virtualenv特定的點子配置文件
- 29. Py2exe不能將python腳本轉換爲Windows可執行文件
- 30. 使用我的可執行文件jar文件的文件關聯
見http://www.python.org/dev/peps/pep- 0397 /適用於Windows的shebang-proposal。 – Macke 2011-06-01 09:36:34
非常相關:[單個cmd.exe會話臨時文件關聯](http://stackoverflow.com/questions/5583024/) – 2011-09-06 20:42:00