Форум сайта python.su
Про манифесты…
Из семплов py2exe выдернул такую консткукцию (я привёл к форматированию 2.6):
manifest_template = '''\
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="5.0.0.0"
processorArchitecture="x86"
name="{prog}"
type="win32"
/>
<description>{prog} Program</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
'''
RT_MANIFEST = 24
setup(
....
windows = [{"script" : "homm3_main.py",
"other_resources": [(RT_MANIFEST, 1,
manifest_template.format(prog="prog"))
]}],
)
Microsoft Visual C++ Runtime LibraryВсё. Я думаю, что не могу больше думать.
Runtime Error!
Program: C:\Develop\test\dist\prog.exe
R6034
An application has an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information.
Отредактировано (Июнь 5, 2009 03:22:12)
Офлайн
ZZZ
Хм. ХЙЗ что это такое.
Мне даже попробовать-то толком негде :(
Офлайн
ZZZ -
Microsoft Visual C++ Runtime Library написал:Совсем нешарю в питоне (только влез) но какраз такая ошибка появляется во многих программах запускаемых на на так называемых “сборках” Win. (неофициальные дистрибы включающие кучу дополнительных расширений опций и ГЛЮКОВ) в последнее время их развелось адское колличество … юзеры видуться и ставят … сталкивался неоднократно …
Runtime Error!
Program: C:\Develop\test\dist\prog.exe
R6034
An application has an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information.
Офлайн
FerromanНичего, и ниже летали! Спасибо за помощь… Видимо буду даунгрейдиться.
Мне даже попробовать-то толком негде
Офлайн
Итак… /барабанная дробь/ Я решил проблему.
Ненавижу маздай!!! Почему у всех не MacOS X??? Ну или Linux какой…
Записываейте. Для для запуска собранной в py2exe программы, написанной на питоне 2.6.x нужно два файла:
C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcr90.dll
и
C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest
Последний имеет в себе такое содержание, которое я совершенно не понимаю:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
<file name="msvcr90.dll" hashalg="SHA1" hash="e0dcdcbfcb452747da530fae6b000d47c8674671"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>KSaO8M0iCtPF6YEr79P1dZsnomY=</dsig:DigestValue></asmv2:hash></file> <file name="msvcp90.dll" hashalg="SHA1" hash="81efe890e4ef2615c0bb4dda7b94bea177c86ebd"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>ojDmTgpYMFRKJYkPcM6ckpYkWUU=</dsig:DigestValue></asmv2:hash></file> <file name="msvcm90.dll" hashalg="SHA1" hash="5470081b336abd7b82c6387567a661a729483b04"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>tVogb8kezDre2mXShlIqpp8ErIg=</dsig:DigestValue></asmv2:hash></file>
</assembly>
Офлайн
P.S. Нутром чую, что нарисовав правильный манифест, можно заставить эту либу подгрузиться из папки с программой…
P.P.S. http://en.wikipedia.org/wiki/Side-by-Side_Assembly –> Тут в виде примера, манифест зависимости этой самой злополучной либы… :-) Впихивание этого манифеста в exe'шник проги, ничего не изменило… Но для меня это всё магия… :-)
P.P.S. Всё. Всем спокойной ночи и приятных сновидений… Ну или весёлого рабочего дня – кому что больше нравится!
Офлайн
Не, не могу не закончить…
И всё-таки я её доломал!
http://www.nabble.com/py2exe,-Py26,-wxPython-and-dll-td20556399.html
Там много, так что я процитирую, ибо решение прикольное…
Thomas Heller-2Оно работет. Фух… Всё. Можно спокойно выпить кофе и спать…
I have not seriously used Python 2.6 with py2exe, also I have no experience
with this new manifest stuff, but a little experiment showed that this approach
seems to work for simple cases (I tested only on XP machines, not Vista!):
I deinstalled python 2.6 (since I had installed it ‘for all users’) and
installed it again ‘for me only’. This installation copied the msvcr90.dll
and Microsoft.VC90.CRT.manifest files into the c:\python26 folder.
Then I ran py2exe over a very simple script ('print “Hi”') which created
an executable. This executable worked fine on a machine where msvcr90.dll
was installed in Windows\SxS (or how it's called), but did NOT run on another
machine where msvcr90.dll is not installed in Windows\SxS.
Then I copied the msvcr90.dll and Microsoft.VC90.CRT.manifest files into the dist
folder where py2exe had created my executable. Now the exe works on both machines.
When I tried to do the same for a simple wxPython script py2exe crashed because
it tried to load msvcp90.dll (IIRC), but didn't find it (it seems only to be installed
in the Windows\SxS folder). This may be a bug in py2exe.
Офлайн
вот это магия) виндоуз в своем репертуаре
Офлайн
А можно по русски что там делается? А то манифесты к dll работают как я знаю в WinXP и выше.
PS: Хочу PyQt сделать портабельной.
Офлайн
Только что столкнулся с такой же проблемой как и наш многоуважаемый ZZZ.
Я просто скопировал файлы Microsoft.VC90.CRT.manifest, Microsoft.VC90.MFC.manifest, Microsoft.VC90.MFCLOC.manifest, msvcp90.dll, msvcr90.dll туды где .ехе и заработало. А кто не ищет трудных путей - устанавливайте НЕТ фреймворк 3.5.
ЗЫ: Пайтон 2.6
Отредактировано (Окт. 27, 2010 16:18:54)
Офлайн