Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

pyopengl & py2exe

18 views
Skip to first unread message

Adam Mikuta

unread,
Jan 21, 2007, 10:23:35 AM1/21/07
to
Zwykle używam pythona pod linuksem. Teraz przyszła potrzeba żeby zrobić
ze skryptu exe i nie mogę sobie poradzić.

Mam pliczek cube.py który korzysta z pyopengla i setup.py:

setup(
version = "0.1",
description = "Wykresik 0.1",
name = "Wykresik",
windows = ["cube.py"]
)

Robię jak napisano na
http://pyopengl.sourceforge.net/documentation/py2exe.html


ADVAPI32.dll - C:\WINDOWS\System32\ADVAPI32.dll
USER32.dll - C:\WINDOWS\System32\USER32.dll
SHELL32.dll - C:\WINDOWS\System32\SHELL32.dll
KERNEL32.dll - C:\WINDOWS\System32\KERNEL32.dll

setup.py py2exe --excludes=OpenGL
running py2exe
*** searching for required modules ***
(...)
*** copy extensions ***
*** copy dlls ***
copying D:\Python25\lib\site-packages\py2exe\run_w.exe ->
D:\Python25\Lib\site-packages\py2exe\samples\Kopia simple\dist\cube.exe
The following modules appear to be missing
['OpenGL.GL', 'OpenGL.GLU', 'OpenGL.GLUT']

No i tworzy się exe który po odpaleniu nie działa a do loga wrzuca:
Traceback (most recent call last):
File "cube.py", line 6, in <module>
ImportError: No module named OpenGL.GLUT

Niby wygooglałem coś co powinno być rozwiązaniem
(http://mail.python.org/pipermail/python-list/2004-August/274079.html
http://mail.python.org/pipermail/python-list/2005-March/313812.html)

Ale i tak nie bardzo wiem co gdzie skopiować i jak ustawić patcha...
--
Adam "Prawda jest prosta - gdyby było inaczej
każdy głupiec mógłby ją zrozumieć".

Rob Wolfe

unread,
Jan 21, 2007, 11:11:14 AM1/21/07
to
Adam Mikuta <adammiku...@gmail.wyt.nij.com> writes:

> Zwykle używam pythona pod linuksem. Teraz przyszła potrzeba żeby zrobić
> ze skryptu exe i nie mogę sobie poradzić.

[...]

> setup.py py2exe --excludes=OpenGL
> running py2exe
> *** searching for required modules ***
> (...)
> *** copy extensions ***
> *** copy dlls ***
> copying D:\Python25\lib\site-packages\py2exe\run_w.exe ->
> D:\Python25\Lib\site-packages\py2exe\samples\Kopia simple\dist\cube.exe
> The following modules appear to be missing
> ['OpenGL.GL', 'OpenGL.GLU', 'OpenGL.GLUT']
>
> No i tworzy się exe który po odpaleniu nie działa a do loga wrzuca:
> Traceback (most recent call last):
> File "cube.py", line 6, in <module>
> ImportError: No module named OpenGL.GLUT

No właśnie, podałeś `--excludes' po to, aby ręcznie skopiować pakiet
OpenGL. Teoretycznie mógłbyś wrzucić wszystko z katalogu
$PYTHON/site-packages/OpenGL, ale w py2exesample [1] jest to już
przycięte do niezbędnego minimum (np. w py2exesample/dist/dots/OpneGL).

[1] http://sourceforge.net/project/showfiles.php?group_id=5988&package_id=113064

--
pozdrawiam
Rob

Rob Wolfe

unread,
Jan 21, 2007, 11:13:53 AM1/21/07
to
Rob Wolfe <r...@smsnet.pl> writes:

Rzeczony katalog OpenGL musisz oczywiście skopiować do katalogu,
w którym utworzony został plik exe.

--
pozdrawiam
Rob

Adam Mikuta

unread,
Jan 21, 2007, 12:27:07 PM1/21/07
to
Dnia 21.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

>> No właśnie, podałeś `--excludes' po to, aby ręcznie skopiować pakiet
>> OpenGL. Teoretycznie mógłbyś wrzucić wszystko z katalogu
>> $PYTHON/site-packages/OpenGL, ale w py2exesample [1] jest to już
>> przycięte do niezbędnego minimum (np. w py2exesample/dist/dots/OpneGL).
> Rzeczony katalog OpenGL musisz oczywiście skopiować do katalogu,
> w którym utworzony został plik exe.

OK, robię tak:
setup.py py2exe --excludes=OpenGL
Z py2exesample\dist\dots kopiuję katalog OpenGL do stworzonego przed
chwilą katalogu dist.

Odpalam exe ale niestedy dalej nie działa w logu to samo co wklejałem
wyżej.

Czegoś nie zrozumiałem?

Adam Mikuta

unread,
Jan 21, 2007, 12:32:56 PM1/21/07
to
Dnia 21.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

>> No właśnie, podałeś `--excludes' po to, aby ręcznie skopiować pakiet
>> OpenGL. Teoretycznie mógłbyś wrzucić wszystko z katalogu
>> $PYTHON/site-packages/OpenGL, ale w py2exesample [1] jest to już
>> przycięte do niezbędnego minimum (np. w py2exesample/dist/dots/OpneGL).
> Rzeczony katalog OpenGL musisz oczywiście skopiować do katalogu,
> w którym utworzony został plik exe.

OK, robię tak:


setup.py py2exe --excludes=OpenGL
Z py2exesample\dist\dots kopiuję katalog OpenGL do stworzonego przed
chwilą katalogu dist.

Odpalam exe ale niestety dalej nie działa. W logu to samo co wklejałem
wyżej.

Czegoś nie zrozumiałem?

Amadeusz Jasak

unread,
Jan 21, 2007, 2:04:55 PM1/21/07
to
Adam Mikuta napisał(a):

> Dnia 21.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:
>
>>> No właśnie, podałeś `--excludes' po to, aby ręcznie skopiować pakiet
>>> OpenGL. Teoretycznie mógłbyś wrzucić wszystko z katalogu
>>> $PYTHON/site-packages/OpenGL, ale w py2exesample [1] jest to już
>>> przycięte do niezbędnego minimum (np. w py2exesample/dist/dots/OpneGL).
>> Rzeczony katalog OpenGL musisz oczywiście skopiować do katalogu,
>> w którym utworzony został plik exe.
>
> OK, robię tak:
> setup.py py2exe --excludes=OpenGL
> Z py2exesample\dist\dots kopiuję katalog OpenGL do stworzonego przed
> chwilą katalogu dist.
>
> Odpalam exe ale niestety dalej nie działa. W logu to samo co wklejałem
> wyżej.
>
> Czegoś nie zrozumiałem?
To może wywal --excludes=OpenGL??

--
Pozdrawiam
Amadeusz 'alfanick' Jasak

Adam Mikuta

unread,
Jan 21, 2007, 3:08:47 PM1/21/07
to
Dnia 21.01.2007 Amadeusz Jasak <amadeus...@gmail.com> napisał/a:

>> Czegoś nie zrozumiałem?
> To może wywal --excludes=OpenGL??

Jeśli dam bez --excludes=OpenGL to przy setup.py py2exe wywala:

The following modules appear to be missing

['pkg_resources']

Stworzony exek nie działa a w logu krzyczy:

Traceback (most recent call last):
File "cube.py", line 6, in <module>

File "OpenGL\GLUT\__init__.pyc", line 2, in <module>
File "OpenGL\raw\GLUT\__init__.pyc", line 6, in <module>
File "OpenGL\raw\GLUT\constants.pyc", line 7, in <module>
File "OpenGL\arrays\__init__.pyc", line 19, in <module>
File "OpenGL\arrays\arraydatatype.pyc", line 5, in <module>
File "OpenGL\arrays\formathandler.pyc", line 8, in <module>
ImportError: No module named pkg_resources

Rob Wolfe

unread,
Jan 21, 2007, 3:40:21 PM1/21/07
to
Adam Mikuta <adammiku...@gmail.wyt.nij.com> writes:

> Dnia 21.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:
>
>>> No właśnie, podałeś `--excludes' po to, aby ręcznie skopiować pakiet
>>> OpenGL. Teoretycznie mógłbyś wrzucić wszystko z katalogu
>>> $PYTHON/site-packages/OpenGL, ale w py2exesample [1] jest to już
>>> przycięte do niezbędnego minimum (np. w py2exesample/dist/dots/OpneGL).
>> Rzeczony katalog OpenGL musisz oczywiście skopiować do katalogu,
>> w którym utworzony został plik exe.
>
> OK, robię tak:
> setup.py py2exe --excludes=OpenGL
> Z py2exesample\dist\dots kopiuję katalog OpenGL do stworzonego przed
> chwilą katalogu dist.
>
> Odpalam exe ale niestety dalej nie działa. W logu to samo co wklejałem
> wyżej.
>
> Czegoś nie zrozumiałem?

W takim razie pokaż zawartość katalogu `dist'.
Jeśli masz tam plik exe i katalog OpenGL, to musi działać.
Próbowałeś uruchomić exe'ki z py2exesample? Też nie działają?

--
pozdrawiam
Rob

Adam Mikuta

unread,
Jan 21, 2007, 5:23:57 PM1/21/07
to

Exeki z py2exesample działają. Próbowałem tam wrzucić swojego exeka ale
nie działał. Później się zorientowałem że py2exesample nie jest na
pythonie 2.5 a takiego używam. Dlatego wrzuciłem do swojego dist katalog
OpenGL z \Python25\Lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\

Exek przy uruchamianiu wywalał:


Traceback (most recent call last):
File "cube.py", line 6, in <module>
ImportError: No module named OpenGL.GLUT

Dla pewności wrzuciłem mu tam też glut32.dll z windows/system ale nie
pomogło.

Zawartość katalogu dist:

2007-01-21 21:04 <DIR> .
2007-01-21 21:04 <DIR> ..
2007-01-21 23:04 <DIR> OpenGL
2001-11-08 10:27 237 568 glut32.dll
2006-09-19 09:52 77 824 bz2.pyd
2006-09-19 09:52 475 136 unicodedata.pyd
2006-09-19 09:52 2 109 440 python25.dll
2006-09-19 09:52 4 608 w9xpopen.exe
2003-02-21 04:42 348 160 MSVCR71.dll
2007-01-21 23:20 707 607 library.zip
2007-01-21 23:20 23 552 cube.exe
2007-01-21 23:21 117 cube.exe.log
9 plik(ów) 3 984 012 bajtów
3 katalog(ów) 10 636 918 784 bajtów wolnych

Rob Wolfe

unread,
Jan 22, 2007, 3:54:44 AM1/22/07
to

Adam Mikuta napisał(a):

> Dnia 21.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:
>
> > W takim razie pokaż zawartość katalogu `dist'.
> > Jeśli masz tam plik exe i katalog OpenGL, to musi działać.
> > Próbowałeś uruchomić exe'ki z py2exesample? Też nie działają?
>
> Exeki z py2exesample działają. Próbowałem tam wrzucić swojego exeka ale
> nie działał. Później się zorientowałem że py2exesample nie jest na
> pythonie 2.5 a takiego używam. Dlatego wrzuciłem do swojego dist katalog
> OpenGL z \Python25\Lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\

Ach... czyli instalowałeś przy pomocy setuptools. To trochę inna
zabawa.

Skopiuj cały katalog `PyOpenGL-3.0.0a5-py2.5.egg' do swojego `dist',
wejdź do katalogu `dist' i ustaw ścieżkę tak:
set PYTHONPATH=PyOpenGL-3.0.0a5-py2.5.egg

odpal interpreter Pythona i spróbuj:
import OpenGL.GLUT

jeśli to zadziała, to potem odpal exe'ka.

--
pozdrawiam
Rob

Adam Mikuta

unread,
Jan 22, 2007, 8:50:38 AM1/22/07
to
Dnia 22.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

> Ach... czyli instalowałeś przy pomocy setuptools. To trochę inna
> zabawa.
>
> Skopiuj cały katalog `PyOpenGL-3.0.0a5-py2.5.egg' do swojego `dist',
> wejdź do katalogu `dist' i ustaw ścieżkę tak:
> set PYTHONPATH=PyOpenGL-3.0.0a5-py2.5.egg
>
> odpal interpreter Pythona i spróbuj:
> import OpenGL.GLUT
>
> jeśli to zadziała, to potem odpal exe'ka.

Dobra jeszcze raz wszystko po koleji, może naprowadzi Cię na to co jest
nie tak. Bo ja nie mam pojęcia.

D:\Python25\Lib\site-packages\py2exe\samples\Kopiasimple> dir
(...)
2007-01-21 15:31 1 037 setup.py
2007-01-21 14:35 7 846 cube.py
D:\(...)> setup.py py2exe --excludes=OpenGL
running py2exe
(...)


The following modules appear to be missing
['OpenGL.GL', 'OpenGL.GLU', 'OpenGL.GLUT']

(...)
D:\(...)> cd dist

Kopiuję D:\Python25\Lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg do
stworzonego katalogu dist.

D:\(...)> set PYTHONPATH=PyOpenGL-3.0.0a5-py2.5.egg
D:\(...)>d:\Python25\python.exe
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenGL.GLUT
>>> ^Z

D:\(...)>cube.exe

Exe nie działa będy w logu:


Traceback (most recent call last):
File "cube.py", line 6, in <module>
ImportError: No module named OpenGL.GLUT

Dzięki wielke za chęć pomocy i cierpliwość.

Rob Wolfe

unread,
Jan 22, 2007, 9:57:25 AM1/22/07
to

Adam Mikuta napisał(a):

> D:\(...)>cube.exe
>
> Exe nie działa będy w logu:
> Traceback (most recent call last):
> File "cube.py", line 6, in <module>
> ImportError: No module named OpenGL.GLUT

Chyba sobie w końcu przypomniałem. Wszystkie moduły i pakiety
jakie exe'ki py2exe potrzebują siedzą w `library.zip' w katalog
`dist'.
Czyli katalog `OpenGL' musi się znaleźć wewnątrz `library.zip'.

--
pozdrawiam
Rob

Adam Mikuta

unread,
Jan 23, 2007, 1:17:00 PM1/23/07
to
Dnia 22.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

> Chyba sobie w końcu przypomniałem. Wszystkie moduły i pakiety
> jakie exe'ki py2exe potrzebują siedzą w `library.zip' w katalog
> `dist'.
> Czyli katalog `OpenGL' musi się znaleźć wewnątrz `library.zip'.

Dorzuciłem mu ten katalog do zipa i teraz rzuca wyjątkiem:

Traceback (most recent call last):
File "cube.py", line 6, in <module>

File
"d:\python25\lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\OpenGL\GLUT\__init__.py",
line 2, in <module>
from OpenGL.raw.GLUT import *
File
"d:\python25\lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\OpenGL\raw\GLUT\__init__.py",
line 6, in <module>
from OpenGL.raw.GLUT.constants import *
File
"d:\python25\lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\OpenGL\raw\GLUT\constants.py",
line 6, in <module>
from ctypes import *
ImportError: No module named ctypes

W ogóle nie rozumiem dlaczego takie ścieżki podaje skoro korzysta z tego
co w zipie...

Rob Wolfe

unread,
Jan 23, 2007, 6:09:21 PM1/23/07
to
Adam Mikuta <adammiku...@gmail.wyt.nij.com> writes:

> Dnia 22.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:
>
>> Chyba sobie w końcu przypomniałem. Wszystkie moduły i pakiety
>> jakie exe'ki py2exe potrzebują siedzą w `library.zip' w katalog
>> `dist'.
>> Czyli katalog `OpenGL' musi się znaleźć wewnątrz `library.zip'.
>
> Dorzuciłem mu ten katalog do zipa i teraz rzuca wyjątkiem:

No dobra, problem mnie zaintrygował, to trochę pogrzebałem
i mam dwie wiadomości: dobrą i złą. :)
Dobra to taka, że udało mi się utworzyć tego exe'ka,
a zła, że tylko na Pythonie 2.4 i PyOpenGL 2.0.2.

Wykonałem takie kroki:

1. edycja cube.py
Trzeba dodać ścieżkę do modułu OpenGL ręcznie,
czyli na początku pliku dodajemy:
import sys
sys.path.append(".")
print sys.path # opcjonalnie do testow

2. python setup.py py2exe --excludes=OpenGL
3. cd dist
4. skopiowanie katalogu OpenGL do katalogu dist
Niestety dodanie katalogu OpenGL do library.zip, to nie był
najlepszy pomysł, ponieważ z zip'a nie mogą być importowane
moduły dynamiczne PYD. Dlatego teraz skopiowaliśmy OpenGL
i dodaliśmy ścieżkę do bieżącego katalogu w cube.py
5. odpalenie cube.exe

>
> Traceback (most recent call last):
> File "cube.py", line 6, in <module>

[...]


> "d:\python25\lib\site-packages\PyOpenGL-3.0.0a5-py2.5.egg\OpenGL\raw\GLUT\constants.py",
> line 6, in <module>
> from ctypes import *
> ImportError: No module named ctypes

A zadziałał Ci w ogóle sam skrypt cube.py odpalony bezpośrednio?
U mnie dla wersji PyOpenGL 3.0.0a5 wychodziły właśnie jakieś problemy
z zależnościami.

>
> W ogóle nie rozumiem dlaczego takie ścieżki podaje skoro korzysta z tego
> co w zipie...

Coś tu pokręciłeś, exe nie szuka po PYTHONPATH, może odpaliłeś cube.py?

--
pozdrawiam
Rob

Adam Mikuta

unread,
Jan 25, 2007, 6:01:13 PM1/25/07
to
Dnia 23.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

>>> Chyba sobie w końcu przypomniałem. Wszystkie moduły i pakiety
>>> jakie exe'ki py2exe potrzebują siedzą w `library.zip' w katalog
>>> `dist'.
>>> Czyli katalog `OpenGL' musi się znaleźć wewnątrz `library.zip'.
>> Dorzuciłem mu ten katalog do zipa i teraz rzuca wyjątkiem:
> No dobra, problem mnie zaintrygował, to trochę pogrzebałem
> i mam dwie wiadomości: dobrą i złą. :)
> Dobra to taka, że udało mi się utworzyć tego exe'ka,
> a zła, że tylko na Pythonie 2.4 i PyOpenGL 2.0.2.

W shakowałem problem sprzętowo - załatwiłem laptopa z linuksem ;-)
Szkoda że jednak wcale nie tak prosto jest robić pythonowe exeki to
pewnie wpływa negatywnie na popularność języka.

PS Jeszcze raz wielkie dzięki za czas poświęcony.

Adam Mikuta

unread,
Jan 25, 2007, 6:09:48 PM1/25/07
to
Dnia 23.01.2007 Rob Wolfe <r...@smsnet.pl> napisał/a:

>>> Chyba sobie w końcu przypomniałem. Wszystkie moduły i pakiety
>>> jakie exe'ki py2exe potrzebują siedzą w `library.zip' w katalog
>>> `dist'.
>>> Czyli katalog `OpenGL' musi się znaleźć wewnątrz `library.zip'.
>> Dorzuciłem mu ten katalog do zipa i teraz rzuca wyjątkiem:
> No dobra, problem mnie zaintrygował, to trochę pogrzebałem
> i mam dwie wiadomości: dobrą i złą. :)
> Dobra to taka, że udało mi się utworzyć tego exe'ka,
> a zła, że tylko na Pythonie 2.4 i PyOpenGL 2.0.2.

Shakowałem problem sprzętowo - załatwiłem laptopa z linuksem ;-)


Szkoda że jednak wcale nie tak prosto jest robić pythonowe exeki to
pewnie wpływa negatywnie na popularność języka.

PS Jeszcze raz wielkie dzięki za czas poświęcony.

0 new messages