我运行了一py2exe编python程序从一个服务器上的数量的客户机(映射到一个网络驱动器上的每一个机,说W:).

为Windows XP和更高的机器,迄今为止零问题与Python捡W:\python23.dll (是的,我使用的是蟒蛇2.3.5为W98的兼容性和所有那)。它然后将使用W:\zlib.pyd 解W:\library.zip 包含所有的.pyc等文件的操作系统和这样的,然后再进口和运行的程序没有任何问题。

这个问题我得到的是在某些Windows98SE机(注:一些Windows98SE机,其他工作似乎没有明显的问题)。会发生什么情况是,该程序从W:,W:\python23.dll 是的,我假设,发现(由于我得到蟒蛇ImportErrors,我们需要能够执行蟒导言),但是一对夫妇的事情不工作:

1)如果W:\library.zip 包含的唯一副本。pyc文件,我得到 ZipImportError: can't decompress data; zlib not available (胡说八道,考虑W:\zlib.pyd 提供工作和现有的XP和更高的机在同一网络)。

2)如果.pyc文件实际上捆绑的内部python exe通过py2exe,或者放在同一个目录。exe,或者放到一个名叫子目录然后设置的一部分PYTHONPATH变量(e。克W:\pylib),我得到 ImportError: no module named os (os是第一个模块进口之前,系统和其他任何).

我想起来了,sys.路径不会提供给搜索,如果操作系统是进口之前,它可能?我会尝试开关的顺序,这些进口但是我的问题依然存在:为什么这是一个零星问题,正在一些网络,但不对其他人吗?以及如何将我力蟒蛇找到的文件,被捆绑内的非常可执行我跑?我立即访问该工作Windows98SE机,但我只有获得非工作的一个(一个客户的地雷)每天早上之前,他们的存储打开。

在此先感谢!


编辑:好了,大的前进步骤。经过调试与PY2EXE_VERBOSE,问题上发生的具体W98SE机是,它不是使用正确的道路语法当寻找进口。首先,它不似乎读PYTHONPATH环境变量(有可能是一个py2exe-具体一个我不知道,就像PY2EXE_VERBOSE).

第二,它只是看起来在一个地方放弃之前(如果该文件被捆绑内EXE,它看起来在那里。如果没有,它看起来library.zip).

编辑2:事实上,根据 , 是有区别之间的sys.路径在蟒蛇的口译和Py2exe可执行文件。具体地说, sys.path contains only a single entry: the full pathname of the shared code archive. 等等。没有备用?甚至当前工作的目录?我会尝试加入 W:\ 路径,但py2exe不符合任何排序的标准用于定位系统图书馆,所以它不会的工作。

现在有趣点。路径它试图载atexit,操作系统,等等。从是:

W:\\library.zip\<module>.<ext>

注意到单一削减之后library.zip但双削减后的驱动的信(有人纠正我,如果这是旨在应工作)。它看起来像如果这是一个串的文字,然后由于削减不增加了一倍,读作为一个(无效)的逃生顺序和原字符印刷(给 W:\library.zipos.pyd, W:\library.zipos.dll, ... 而不是用斜线);如果它不是一个字符串中,双削减可能不能normpath会自动(如应),使双削减混淆的模块中的加载程序。就像我说的,我不能 set PYTHONPATH=W:\\library.zip\\ 因为它忽略了这一变量。

它的价值可能使用sys.路径。追加开始的我的程序,但很难编码模块的路径是一个绝对的最后手段,特别是由于问题发生在一个结构的一个过时的操作系统。

任何想法?我有一个,这是normpath的 sys.path..可惜我需要的 os 为。另一个就是追加 os.getenv('PATH')os.getenv('PYTHONPATH') sys.路径...再次,需要的 os 模块。的 site 模块也没有初始化,因此我不能使用。孔文件。

我最近也尝试了下列代码在启动程序:

for pth in sys.path:
    fErr.write(pth)
    fErr.write(' to ')
    pth.replace('\\\\','\\') # Fix Windows 98 pathing issues
    fErr.write(pth)
    fErr.write('\n')

但它不能负荷linecache.pyc,或任何其他事项;它实际上不能执行这些命令看起来的东西。是否有任何方式使用建立功能,其中并不需要linecache修改sys.路径的动态?或者我降到硬的编码正确的sys.路径?

有帮助吗?

解决方案 2

问题不再是我的问题,我找到了一个替代的解决方案(这可能会或可能不会参与戒烟有我的工作)。接受此答案直到别人可以提供更令人满意的解决方案。

其他提示

这不是一个直接的答案,但是可能还有一些帮助。你熟悉的 -v 选择在蟒蛇。类型 python -h 要了解更多。注意到相当于 PYTHONVERBOSE 环境变量py2exe会脚本 PY2EXE_VERBOSE, ,如几乎无处可除外 这个职位,由其作者.显然,它可以采取值1或2,基本上就像 -v-vv, 虽然这是稍有不同 如何PYTHONVERBOSE工作.

还注意到有关你的sys.路径的想法:你是否有进口的 sys 已经或不会没有影响你是否可以进口 os.就是说,蟒蛇的道路(见 sys.path)是总是可用的,在意义上,它反映了一个内部特征的解释,这是那里你是否已经进口的系统模块或没有。

作为与其他一些模块, sys 是建立在,所以它应该永远被导入即使应用几乎完全瘫痪。如果这将有助于,你可能能够使用 sys.builtin_module_names 看看他们是你的版本的蟒蛇。如果解释正在运行在所有这些信息将是可供使用,所以下面的可能最有用的程序,你可以看看你有什么:

import sys
print sys.builtin_module_names

还有,我建议在尝试什么新奇的样捆绑。pyc文件内。exe。你已经有了足够的工作对你被卡支持windows98下,如果我是你,我会去的最简单办法就会让我得到这份工作做的更有趣的领域。如果你能安装Python正常运行,从源,你绝对应该考虑它!:)

编辑 包括链接到PY2EXE_VERBOSE信息每评论darvids0n.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top