Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上共存的Python程序_Python_Windows - Fatal编程技术网

Windows上共存的Python程序

Windows上共存的Python程序,python,windows,Python,Windows,我正在寻找一种让多个Python程序在同一台Windows机器上共存的方法 问题是:假设程序A需要Python2.5,程序B需要Python2.6,程序C需要Python3,并且每个程序都需要自己版本的Qt、Wx或其他模块 尝试在同一台机器上安装所有这些依赖项都会带来问题,例如,您可以并行安装不同版本的Python,但其中只有一个版本可以具有.py文件关联,因此如果将该文件关联给Python 2.5,那么B和C将无法工作,等等 理想的情况是,程序A可以与自己的Python解释器Qt/Wx/MyS

我正在寻找一种让多个Python程序在同一台Windows机器上共存的方法

问题是:假设程序A需要Python2.5,程序B需要Python2.6,程序C需要Python3,并且每个程序都需要自己版本的Qt、Wx或其他模块

尝试在同一台机器上安装所有这些依赖项都会带来问题,例如,您可以并行安装不同版本的Python,但其中只有一个版本可以具有.py文件关联,因此如果将该文件关联给Python 2.5,那么B和C将无法工作,等等

理想的情况是,程序A可以与自己的Python解释器Qt/Wx/MySQL driver/whatever一起生活在C:\A中,并且永远不接触该目录之外的任何内容,B和C也是如此

除了走完整的虚拟箱路线之外,还有其他方法可以实现这一点吗


编辑:我尝试了批处理文件解决方案,但不起作用。也就是说,它可以在简单的测试脚本上工作,但例如,如果OpenRPG所需的Python版本不拥有文件关联,则它在加载过程中的某个点会失败。

一个解决方案是为给定的应用程序创建一个批处理文件,以调用正确的解释器。这样,您可以在单独的文件夹中安装其他解释器


可能并不完美,但它可以工作。

使用批处理文件运行脚本,例如在记事本中写入:

c:\python26\python.exe C:\Script_B\B.py c:\python26\python.exe c:\Script\u B\B.py
并将其保存为runB.bat(或任何.bat)。它将与c:\python26\python.exe文件中的解释器一起运行,解释器在空格后指定。

编写一个python脚本,模仿unix shell处理SCIRPT的方式——查看第一行,看看它是否匹配#!(壳牌公司名称)。然后让python脚本执行该解释器,并向其提供其余参数

然后,将.py与脚本相关联

你考虑过吗?一旦您这样做了,您所要做的就是调用EXE,机器不需要为其安装python。编译时,所有必需的模块等都与发行版一起打包。

virtualenv是一种用于创建 孤立的Python环境

正在解决的基本问题是 依赖项和版本之一,以及 间接许可。想象你 有一个需要版本的应用程序 1个LibFoo,但另一个应用程序 需要版本2。你怎么能用 这两种应用程序?如果你 将所有内容安装到 /usr/lib/python2.4/site-packages(或 不管你的平台标准是什么 位置是),很容易在一个 你无意中 升级不应该升级的应用程序 要升级

见前面的答案


您应该查看的另一个工具是
pip
,它非常适合在虚拟环境中安装特定版本的库。例如,如果需要为一个应用程序运行Pythonv2.x中某个库的v1.0,并在Pythonv2.x中运行同一个库的1.1,则需要virtualenv以及在该环境中安装特定版本的方法。Virtualenv+pip是您的最佳选择。

看起来最好的解决方案是在运行适当版本的Python之前设置文件关联的批处理文件,正如对其中一个答案的评论所述:

除了.py文件关联之外,您还遇到了什么问题?我不知道除此之外还有什么问题,因为到目前为止,我的文件关联问题测试失败。请使用ActivePython并键入
pythonX.Y.exe
(当然,
.exe
是可选的)就像在Unix上一样。是的,试过了,没用。再次使用OpenRPG作为测试用例,我用已知的解决方案解决了大约六层问题,在放弃之前,我通过反复试验猜到了另外六层问题。不幸的是,在Python源文件没有以这样的指令开头的一般情况下,这失败了。问题是,这是一个不完整的解决方案隔离安装和依赖项的解决方案。假定它在Linux上不超过VirtualEnv。。。或者VirtualEnv也可以在Windows上工作??由于说明中给出了Windows使用的具体说明,我认为这意味着VirtualEnv可以在Windows上工作。我确认了吗?不。我甚至打赌它在Windows命令解释器下的工作方式与在Linux bash下的有所不同。抱歉@hughdbrown:我没有看到你的帖子。我道歉。我自己在Linux上使用VirtualEnv,它很棒。。。我不知道它在Windows上也起作用。再一次,抱歉给您带来任何困惑/麻烦等。不,我没有。在发布之前开始编写:)这看起来可以解决同一Python版本中不同模块集的问题。我不认为它试图解决不同Python版本(以及由此产生的文件关联冲突)的问题,除非我误解了它?正如Ian Bicking所说,“无论您使用什么Python解释器来创建virtualenv,都是将安装到新环境中的解释器。”因此,您可以通过使用不同的python版本创建虚拟环境来获得不同的python版本。对,但它没有提到任何关于文件关联问题的内容——可能是因为它讨论的是Mac OS,据我所知,Mac OS使用的是完全不同的文件关联技术。但是看看其他的回复,ftype技巧似乎是一个解决方案。所以最坏的情况是,在隔离的环境中,您不以
foo.py
的形式运行脚本,而是以
python foo.py
的形式运行脚本,然后选择正确的python版本。如果您试图让单独的python版本并行运行,那么ftype关联问题最少。