🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
5 messages
5 total messages Started by Parasit Fri, 31 Aug 2012 07:11
Py2exe i Beatifullsoup
#28448
Author: Parasit
Date: Fri, 31 Aug 2012 07:11
28 lines
2256 bytes
Witam,
Napisałem prosty skrypcik który pobiera różne rzeczy z sieci, głównie po http.
Znajomy poprosił mnie żebym mu go udostępnił, problem polegał na tym że nie ma i nie chce mieć zainstalowanego całego pythona. Pomyślałem że po prostu zrobię mu wersję exe, jak już z resztą kilka razy robiliśmy. 
Zrobiłem prosty setup 

setup(console=['StripSucker.py'])

i przy próbie wygenerowania exe dostałem:

The following modules appear to be missing
['BeautifulSoup', 'mechanize']

Przy próbie uruchomienia dostałem standardowy błąd:
Traceback (most recent call last):
  File "StripSucker.py", line 5, in <module>
ImportError: No module named mechanize

Zmieniłem setup wg. instrukcji:
setup(windows=[{"script" : "StripSucker.py"}], options={"py2exe":{"includes":["BeautifulSoup", "mechanize"]}})

Różnica jest taka że wywala się już przy próbie wygenerowania exe:
    raise ImportError, "No module named " + qname
ImportError: No module named BeautifulSoup

Jak to obejść??? Przypominam że mam te biblioteki i skrypt odpalany lokalnie działa prawidłowo.

Pozdrawiam
Parasit
Re: Py2exe i Beatifullsoup
#28449
Author: Rob Wolfe
Date: Fri, 31 Aug 2012 20:26
43 lines
2561 bytes
Parasit <bartosz.bubak@gmail.com> writes:

> Witam,
> Napisałem prosty skrypcik który pobiera różne rzeczy z sieci, głównie po http.
> Znajomy poprosił mnie żebym mu go udostępnił, problem polegał na tym 
> że nie ma i nie chce mieć zainstalowanego całego pythona. 
> Pomyślałem że po prostu zrobię mu wersję exe, jak już z resztą kilka razy robiliśmy. 
> Zrobiłem prosty setup 
>
> setup(console=['StripSucker.py'])
>
> i przy próbie wygenerowania exe dostałem:
>
> The following modules appear to be missing
> ['BeautifulSoup', 'mechanize']
>
> Przy próbie uruchomienia dostałem standardowy błąd:
> Traceback (most recent call last):
>   File "StripSucker.py", line 5, in <module>
> ImportError: No module named mechanize
>
> Zmieniłem setup wg. instrukcji:
> setup(windows=[{"script" : "StripSucker.py"}], options={"py2exe":{"includes":["BeautifulSoup", "mechanize"]}})
>
> Różnica jest taka że wywala się już przy próbie wygenerowania exe:
>     raise ImportError, "No module named " + qname
> ImportError: No module named BeautifulSoup
>
> Jak to obejść??? Przypominam że mam te biblioteki i skrypt odpalany lokalnie działa prawidłowo.

Zapodaj:
python -v -c "import BeautifulSoup"
i w listingu zobacz skąd tak naprawdę ten moduł jest importowany.
U mnie to jest np.:
$ python -v -c "import BeautifulSoup" 2>&1 | grep -i beautiful
# /usr/lib/pymodules/python2.6/BeautifulSoup.pyc matches /usr/lib/pymodules/python2.6/BeautifulSoup.py
import BeautifulSoup # precompiled from /usr/lib/pymodules/python2.6/BeautifulSoup.pyc

Być może zaciągany jest z lokalizacji, której py2exe nie widzi.
Dla pewności wrzuć go do %PYTHON_HOME%\lib\site-packages 
i dodaj "import BeautifulSoup" do setup.py.

RW
Re: Py2exe i Beatifullsoup
#28450
Author: krystian.rosinski
Date: Sat, 01 Sep 2012 07:40
72 lines
3269 bytes
W dniu piątek, 31 sierpnia 2012 09:11:18 UTC+2 użytkownik Parasit napisał:
> Witam,
> 
> Napisałem prosty skrypcik który pobiera różne rzeczy z sieci, głównie po http.
> 
> Znajomy poprosił mnie żebym mu go udostępnił, problem polegał na tym że nie ma i nie chce mieć zainstalowanego całego pythona. Pomyślałem że po prostu zrobię mu wersję exe, jak już z resztą kilka razy robiliśmy. 
> 
> Zrobiłem prosty setup 
> 
> 
> 
> setup(console=['StripSucker.py'])
> 
> 
> 
> i przy próbie wygenerowania exe dostałem:
> 
> 
> 
> The following modules appear to be missing
> 
> ['BeautifulSoup', 'mechanize']
> 
> 
> 
> Przy próbie uruchomienia dostałem standardowy błąd:
> 
> Traceback (most recent call last):
> 
>   File "StripSucker.py", line 5, in <module>
> 
> ImportError: No module named mechanize
> 
> 
> 
> Zmieniłem setup wg. instrukcji:
> 
> setup(windows=[{"script" : "StripSucker.py"}], options={"py2exe":{"includes":["BeautifulSoup", "mechanize"]}})
> 
> 
> 
> Różnica jest taka że wywala się już przy próbie wygenerowania exe:
> 
>     raise ImportError, "No module named " + qname
> 
> ImportError: No module named BeautifulSoup
> 
> 
> 
> Jak to obejść??? Przypominam że mam te biblioteki i skrypt odpalany lokalnie działa prawidłowo.
> 
> 
> 
> Pozdrawiam
> 
> Parasit

Witam,

Której wersji BeautifulSoup używasz? 3 czy 4? W jaki sposób została zainstalowana?

BeautifulSoup 3 to pojedynczy moduł .py, który można zaimportować przy pomocy:

from BeautifulSoup import BeautifulSoup

W przypadku wersji 4 jest to pakiet o nazwie bs4:

from bs4 import BeautifulSoup

Może tu gdzieś leży przyczyna. http://www.crummy.com/software/BeautifulSoup/bs4/doc/#porting-code-to-bs4

W obu przypadkach importowany moduł powinien zostać dodany automatycznie do exe. Zachęcam do sprawdzenia cx_freeze. Zasada działania podobna do py2exe, ale jest aktywnie rozwijany (jest już nawet wersja dla Pythona 3.3).
Re: Py2exe i Beatifullsoup
#28451
Author: Parasit
Date: Sun, 02 Sep 2012 21:57
12 lines
1822 bytes
W dniu sobota, 1 września 2012 09:40:38 UTC+2 użytkownik krystian...@gmail.com napisał:

> Której wersji BeautifulSoup używasz? 3 czy 4? W jaki sposób została zainstalowana?

import BeautifulSoup # loaded from Zip c:\Python27\lib\site-packages\beautifulso
up-3.2.1-py2.7.egg\BeautifulSoup.pyc

Używałem jak zwykle "easy_install".
 
> W obu przypadkach importowany moduł powinien zostać dodany automatycznie do exe. Zachęcam do sprawdzenia cx_freeze. Zasada działania podobna do py2exe, ale jest aktywnie rozwijany (jest już nawet wersja dla Pythona 3.3).

Ten sam problem jest z mechanize, spróbuję się zaprzyjaźnić z cx_freeze, dla mnie żadna różnica i tak 99% swoich zabawek używam na linuxie.
Re: Py2exe i Beatifullsoup
#28452
Author: Parasit
Date: Sun, 02 Sep 2012 22:37
41 lines
3377 bytes
W dniu sobota, 1 września 2012 09:40:38 UTC+2 użytkownik krystian...@gmail.com napisał:

> W obu przypadkach importowany moduł powinien zostać dodany automatycznie do exe. Zachęcam do sprawdzenia cx_freeze. Zasada działania podobna do py2exe, ale jest aktywnie rozwijany (jest już nawet wersja dla Pythona 3.3).

Update.
Użyłem cx_freeze, efekt ten sam, tyle że czepia się mechanize zamiast BeautifulSoup.
[code]
c:\poligon\StripSucker> cxfreeze StripSucker.py --target-dir dist --include-modules BeautifulSoup,mechanize
Traceback (most recent call last):
  File "C:\Python27\Scripts\cxfreeze", line 5, in <module>
    main()
  File "C:\Python27\lib\site-packages\cx_Freeze\main.py", line 188, in main
    freezer.Freeze()
  File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 520, in Freeze self._FreezeExecutable(executable)
  File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 134, in _Freez
eExecutable
    finder = self._GetModuleFinder(exe)
  File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 302, in _GetModuleFinder
    finder.IncludeModule(name)
  File "C:\Python27\lib\site-packages\cx_Freeze\finder.py", line 523, in Include
Module namespace = namespace)
  File "C:\Python27\lib\site-packages\cx_Freeze\finder.py", line 271, in _Import
Module
    raise ImportError("No module named %r" % name)
ImportError: No module named 'mechanize'

c:\poligon\StripSucker> easy_install mechanize
Searching for mechanize
Best match: mechanize 0.2.5
Processing mechanize-0.2.5-py2.7.egg
mechanize 0.2.5 is already the active version in easy-install.pth

Using c:\python27\lib\site-packages\mechanize-0.2.5-py2.7.egg
Processing dependencies for mechanize
Finished processing dependencies for mechanize
[/code]

Próby użycia setup.py kończą się dokładnie tak samo, albo dodam mechanize do "include" i dostaje zamiast exe:
ImportError: No module named 'mechanize'

Albo nie dopisuje do include i dostaje exe, ale przy próbie uruchomienia jest ten sam błąd.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads