Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2009 03:19:40

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt4 -- не фурычит!

Про манифесты…
Из семплов 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"))
]}],
)
Я совершенно не понимаю всю эту магию, но после сборки оно мне сказало, что не может найти MSVCR90.dll. При установленном питоне и реальном наличии этой либы в системе. Когда я кинул ему эти три dll, то он сказал мне всё, что обо мне думает.
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.
Всё. Я думаю, что не могу больше думать.

P.S. А у меня юбилей… Блин…



Отредактировано (Июнь 5, 2009 03:22:12)

Офлайн

#2 Июнь 5, 2009 15:33:44

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4 -- не фурычит!

ZZZ
Хм. ХЙЗ что это такое.
Мне даже попробовать-то толком негде :(

Офлайн

#3 Июнь 5, 2009 16:06:35

o_nix
От:
Зарегистрирован: 2009-06-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 -- не фурычит!

ZZZ -

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.
Совсем нешарю в питоне (только влез) но какраз такая ошибка появляется во многих программах запускаемых на на так называемых “сборках” Win. (неофициальные дистрибы включающие кучу дополнительных расширений опций и ГЛЮКОВ) в последнее время их развелось адское колличество … юзеры видуться и ставят … сталкивался неоднократно …
Такчто уточни у юзверей этот момент

P.S. Сборка Win это в разы большее зло чем official Windows mustday



Офлайн

#4 Июнь 5, 2009 16:52:57

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt4 -- не фурычит!

Ferroman
Мне даже попробовать-то толком негде
Ничего, и ниже летали! Спасибо за помощь… Видимо буду даунгрейдиться.
Или разбирать инсталлятор питона на предмет нужных библиотек. А то и пересобиру питон с mingw… Хотя это, наверное, геморройно… :-)

o_nix, у меня на Parallels Desktop for Mac стоит чистая (вчера поставленная), когда-то лицензионная корпаративная ХРень со вторым паком. Вот я на на неё то ставлю питон, то удаляю… И программа, соответственно, то работает, то нет.



Офлайн

#5 Июнь 6, 2009 04:18:13

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt4 -- не фурычит!

Итак… /барабанная дробь/ Я решил проблему.
Ненавижу маздай!!! Почему у всех не 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>
Я заставлю nsis просто копировать эти файлы в нужное место и всё будет замечательно… Но как всегда есть “но”, которое портит всю идилию. А если человек поставит какую-нить программу с этой библиотекой (например Python 2.6.2), а потом удалит, то и эти файлы снесуться и моя программа откажется работать.
Очень хотелось бы совета, как это правильно сделать.
Попытка положить это рядом с *.exe программы, желаемого эффекта не возымела. Как, впрочем, и вообще какого-либо эффекта.



Офлайн

#6 Июнь 6, 2009 05:17:31

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt4 -- не фурычит!

P.S. Нутром чую, что нарисовав правильный манифест, можно заставить эту либу подгрузиться из папки с программой…

P.P.S. http://en.wikipedia.org/wiki/Side-by-Side_Assembly –> Тут в виде примера, манифест зависимости этой самой злополучной либы… :-) Впихивание этого манифеста в exe'шник проги, ничего не изменило… Но для меня это всё магия… :-)

P.P.S. Всё. Всем спокойной ночи и приятных сновидений… Ну или весёлого рабочего дня – кому что больше нравится!



Офлайн

#7 Июнь 6, 2009 06:00:06

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt4 -- не фурычит!

Не, не могу не закончить…
И всё-таки я её доломал!

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.
Оно работет. Фух… Всё. Можно спокойно выпить кофе и спать…

Да, ничего, что я тут как у себя в блоге? :-)



Офлайн

#8 Июнь 6, 2009 13:29:46

bobry
От:
Зарегистрирован: 2008-08-03
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 -- не фурычит!

вот это магия) виндоуз в своем репертуаре



Офлайн

#9 Сен. 11, 2009 17:34:25

GDK
От:
Зарегистрирован: 2009-08-21
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 -- не фурычит!

А можно по русски что там делается? А то манифесты к dll работают как я знаю в WinXP и выше.
PS: Хочу PyQt сделать портабельной.



Офлайн

#10 Окт. 27, 2010 16:17:41

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

PyQt4 -- не фурычит!

Только что столкнулся с такой же проблемой как и наш многоуважаемый 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version