Windows下面制作绿色版的Python环境

mallon 发布于 2010/11/30 18:18
阅读 14K+
收藏 12

首先在某个地方安装安装版的Python,比如虚拟机里,我装的是“python-2.7.1.msi”,然后把安装目录整个拷过来备用。之所以安装版无法做成绿色版,是因为其中的三个主要文件“python.exe”、“pythonw.exe”和“python27.dll(安装在system32目录中)”都依赖于“msvcr90.dll”这个非常恶心的东西。我们需要把它绿色化。

下载并解压缩源代码包,我下载的是“Python-2.7.1.tar.bz2”,然后进入“PCbuild”目录,用Visual Studio 2008打开“pcbuild.sln”文件,注意,“PC”目录下面还有一些早期版本Visual Studio的工程文件,我试过VC6的,根本无法编译,其它没试,不过既然官方都用2008的,那我们也跟着用就是了。

我的Visual Studio 2008装了SP1,编译其中的“python”、“pythoncore”和“pythonw”三个项目得到“python.exe”、“pythonw.exe”和“python27.dll”三个文件,替换备用目录中同名的文件,然后把Visual Studio 2008安装目录中的“VC\redist\x86\Microsoft.VC90.CRT”目录中的“msvcr90.dll”和“Microsoft.VC90.CRT.manifest”也拷到备用目录中,再把备用目录整个拷到一个干净的环境中。执行python.exe,却出错了:无法启动!用Depends工具观察,报依赖错误!

回过头检查编译生成的manifest文件才发现,原来虽然Visual Studio 2008装了SP1,按理CRT已经升级到了9.0.30729.4148版,但是manifest里链接的还是9.0.21022.8版!所以只能将“python”、“pythoncore”和“pythonw”三个项目的属性作如下设置:



然后重新编译后,manifest文件就独立出来而不是嵌在程序中了,最后得到“python.exe”、“pythonw.exe”、“python27.dll”和相应的manifest文件“python.exe.manifest”、“pythonw.exe.manifest”、“python27.dll.manifest”,整个拷到备用目录中替换原来的文件。

用文本编辑器打开“python.exe.manifest”、“pythonw.exe.manifest”、“python27.dll.manifest”和“Microsoft.VC90.CRT.manifest”四个manifest文件,把前三个文件中的“assemblyIdentity”中的“version”和“publicKeyToken”修改成和“Microsoft.VC90.CRT.manifest”保持一致

OK!再次执行python.exe,一切正常了!

最后在备用目录中新建一个批处理文件“console.bat”,内容为:

@echo off
cd /d %~dp0
set PATH=%CD%;%PATH%
start cmd.exe

以后直接执行该批处理文件就能得到一个设置好环境变量的Shell了。

加载中
3
燕尘
燕尘

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

0
mallon
mallon

引用来自#2楼“燕尘”的帖子

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

汗,还真是

肖滔
肖滔
真的是,好人,你好经典。
0
答复哈
答复哈

引用来自#3楼“mallon”的帖子

引用来自#2楼“燕尘”的帖子

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

汗,还真是

汗,学到了~

0
xunxun
xunxun

引用来自#2楼“燕尘”的帖子

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

No,官方编译的不一定最好,自己编译还可以瞧瞧源码,自己可以改改,打打补丁,或者变更编译开关以获得最小的体积或最佳的性能,官方编译的都太保守。

0
I
IntoRush

顶一下楼主的探索精神,谢谢分享,而且如果楼主不动手、不分享,还真不能引出一楼的回复,哈哈

0
北柯一梦
北柯一梦

顶一下LZ,最近想自学一下python。

0
honghs
honghs

学习到了哦。

0
恋恋美食
恋恋美食

引用来自“燕尘”的答案

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

如此安装的话,安装完的文件移到别的电脑上不需要配置环境变量什么的吗?

0
林四哥
林四哥

引用来自“燕尘”的答案

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

O~  原来当前用户和所有用户安装的区别在此...
0
husw
husw

引用来自“燕尘”的答案

哈哈,小笨笨。

Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 Python 装到 D 盘上,这样你重装机器或者复制到别处都还能继续用。

如果你选择安装给所有用户,它就会把那些 dll 给装到 System32 系统目录去了,当然就没法绿色了。

不用费这么大功夫了,竟然重编译。自己编译的哪有官方编译的好啊。

学到了
返回顶部
顶部