为什么 Windows 上的 virtualenv 不将 .py/.pyw/.pyo/.pyc 文件与 virtualenv 的 Python 可执行文件版本关联起来?
virtualenv 不将 .py(w)
文件与 virtualenv 的 Python 可执行文件版本关联的原因是什么?考虑到没有像 shebang 在 Windows 上。
What is the reason virtualenv does not associate .py(w)
files with virtualenv's version of Python executables? This seems like an ideal task for virtualenv on Windows taking into consideration that there's no mechanism like shebang on Windows.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
文件类型关联在 Windows 注册表中处理。 virtualenv 激活脚本必须修改注册表项,而停用脚本则需要恢复以前的值(否则可能会破坏关联)。
如果激活一个 virtualenv,打开 cmd.exe 的第二个实例,然后激活另一个 virtualenv,会发生什么情况?除非您以正确的顺序停用它们,否则存储的注册表项值将会丢失。
我不是 virtualenv 开发人员,我想说潜在的问题远远超过了微小的好处。
File type associations are handled in the Windows registry. The virtualenv activate script would have to modify the registry keys and the deactivate script would need to restore the previous value (or risk breaking the associations).
What happens if you activate a virtualenv, open a second instance of cmd.exe, and activate a different virtualenv? Unless you deactivate them in the right order, the stored values for the registry keys would be lost.
I'm not a virtualenv developer, I'd say that the potential problems far outweigh the slight benefit.
virtualenvwrapper-win 确实将 Python 文件与当前活动的 virtualenv 关联起来:
python.bat
看起来像这样更新
现在这是可能的 - 请参阅如何将Python脚本与活动的virtualenv关联起来?
virtualenvwrapper-win does associate Python files with currently active virtualenv:
python.bat
looks like thisUPDATE
Now it's possible – see How to associate Python scripts with active virtualenv?
目前我所有的Python开发都是在Linux上进行的,但我正在考虑在Windows上工作,这就是我发现这个问题的方式。我的答案是一个可操作的答案:
我总是键入
python.py
,而不是在提示符下键入.py
。如果你采用这个习惯,virtualenv 不会为你执行正确的 Python 吗?All of my Python development at present is on Linux, but I'm looking at working on Windows, which is how I found this question. My answer would be an operational one:
Instead of typing
<scriptName>.py
at a prompt, I always typepython <scriptName>.py
. If you adopt this habit, won't virtualenv execute the proper Python for you?Python 启动器支持自定义命令。在 $env:LOCALAPPDATA 中创建一个 py.ini 文件,其中包含如下部分:
现在,您可以在 #!你的脚本行:
The Python launcher supports custom commands. Create a py.ini file in $env:LOCALAPPDATA with a section like this:
Now, you can use venvpython in the #! line of your script: