Prisijungti

Python kodo kompiliavimas

  • 22 Grd '10

Sveiki, taip nutiko, kad užsižaidžiau su Python ir WX (išvaizda) plačiau apie WX čia. Sukūręs Python programėlę, šiokį tokį projektą ir įvilkes į WX, bandžiau sukompimliuoti su Freeze (plačiau čia) ir susikompiliavusi programą nepasileidžia. Sukompiliuoja, kai darau make - gaunu gale kažką tokio:
gcc -pthread -Wl,-Bsymbolic-functions -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions config.o frozen.o M_ConfigParser.o M_StringIO.o M_UserDict.o M__LWPCookieJar.o M__MozillaCookieJar.o M___future__.o M___main__.o M__abcoll.o M__threading_local.o M_abc.o M_apport.o M_apport__fileutils.o M_apport__packaging.o M_apport__packaging_impl.o M_apport__report.o M_apport_python_hook.o M_apt.o M_apt__cache.o M_apt__cdrom.o M_apt__deprecation.o M_apt__package.o M_apt__progress.o M_apt__progress__base.o M_apt__progress__old.o M_apt__progress__text.o M_atexit.o M_base64.o M_bdb.o M_bisect.o M_calendar.o M_cmd.o M_codecs.o M_collections.o M_cookielib.o M_copy.o M_copy_reg.o M_difflib.o M_dis.o M_doctest.o M_dummy_thread.o M_dummy_threading.o M_email.o M_email___parseaddr.o M_email__base64mime.o M_email__charset.o M_email__encoders.o M_email__errors.o M_email__feedparser.o M_email__generator.o M_email__header.o M_email__iterators.o M_email__message.o M_email__mime.o M_email__parser.o M_email__quoprimime.o M_email__utils.o M_encodings.o M_encodings__aliases.o M_fnmatch.o M_ftplib.o M_functools.o M_genericpath.o M_getopt.o M_getpass.o M_gettext.o M_glob.o M_gzip.o M_hashlib.o M_heapq.o M_httplib.o M_inspect.o M_keyword.o M_linecache.o M_locale.o M_logging.o M_macurl2path.o M_mimetools.o M_mimetypes.o M_new.o M_ntpath.o M_nturl2path.o M_opcode.o M_optparse.o M_os.o M_os2emxpath.o M_pdb.o M_pickle.o M_posixpath.o M_pprint.o M_problem_report.o M_quopri.o M_random.o M_re.o M_repr.o M_rfc822.o M_shlex.o M_shutil.o M_site.o M_sitecustomize.o M_socket.o M_sre_compile.o M_sre_constants.o M_sre_parse.o M_ssl.o M_stat.o M_string.o M_struct.o M_subprocess.o M_tempfile.o M_textwrap.o M_threading.o M_token.o M_tokenize.o M_traceback.o M_types.o M_unittest.o M_urllib.o M_urllib2.o M_urlparse.o M_uu.o M_warnings.o M_weakref.o M_wx.o M_wx____version__.o M_wx___controls.o M_wx___core.o M_wx___gdi.o M_wx___misc.o M_wx___windows.o M_xml.o M_xml__dom.o M_xml__dom__NodeFilter.o M_xml__dom__domreg.o M_xml__dom__expatbuilder.o M_xml__dom__minicompat.o M_xml__dom__minidom.o M_xml__dom__pulldom.o M_xml__dom__xmlbuilder.o M_xml__parsers.o M_xml__parsers__expat.o M_xml__sax.o M_xml__sax___exceptions.o M_xml__sax__expatreader.o M_xml__sax__handler.o M_xml__sax__saxutils.o M_xml__sax__xmlreader.o /usr/lib/python2.6/config/libpython2.6.a -lssl -lcrypto -lssl -lcrypto -L/usr/lib -lz -lpthread -ldl -lutil -lm -o lrytas /usr/lib/python2.6/config/libpython2.6.a(posixmodule.o): In function `posix_tmpnam': (.text+0x7fa): warning: the use of `tmpnam_r' is dangerous, better use `mkstemp' /usr/lib/python2.6/config/libpython2.6.a(posixmodule.o): In function `posix_tempnam': (.text+0x8f7): warning: the use of `tempnam' is dangerous, better use `mkstemp' Galbūt, kažkas turite didesnės patirties šioje srityje ir galėtumėte nukreipti teisinga linkme, nes projektas nekompiliuotas veikia be priekaisštų, norėtūsi įgyvendinti.
Galbūt yra kažkoks alternatyvus kompiliavimo metodas, kuris pavyktų ar kurį jūs naudojate...

  • 22 Grd '10

Išbandžiau ir aš:

virtualenv --no-site-packages freeze && cd freeze
wget 'http://prdownloads.sourceforge.net/cx-freeze/cx_Freeze-4.2.1.tar.gz?download' -O- | tar -xzf-
cd cx_Freeze-4.2.1
../bin/python setup.py install
cd ..
echo 'print("Sveikas pasauli!")' > hello.py
./bin/cxfreeze hello.py --target-dir dist
./dist/hello 
Sveikas pasauli

Tik niekaip nesuprantu, kam tau to reikia? Mano manymu, tai kažkoks bereikalingas apsunkinimas... Tuo labiau, tas sukompiliuotas failas yra paprasčiausias zip archyvas:

file dist/hello 
dist/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
unzip -l dist/hello
Archive:  dist/hello
  Length      Date    Time    Name
---------  ---------- -----   ----
      120  2010-12-22 23:24   __main__.pyc
     1125  2010-10-17 01:09   cx_Freeze__init__.pyc
---------                     -------
     1245                     2 files

Paprastą .py failą gali paleisti kur tik nori, o tokį sukompiliuotą failą, gali paleisti tik lygiai tokioje pačioje platformoje, kurioje tas failas buvo sukompiliuotas.

  • 23 Grd '10

Sukompiliavo... Veikia, bet tik toje konkrečioje sukompiliuotoje dist kataloge.. su daug *.so failų, negali kaip nors be jų?

  • 23 Grd '10

a, reikėjo --no-copy-deps primesti.

  • 23 Grd '10

Tuo labiau, tas sukompiliuotas failas yra paprasčiausias zip archyvas:
Ar po to tą zip failą galima išarchyvuoti ar ne? Man kažkodėl nesigauna..

  • 23 Grd '10

abrius, o kam tau iš vis to reikia?

  • 24 Grd '10

@sirex rašė:
abrius, o kam tau iš vis to reikia?

Nenoriu, kad matytų kodo. "Nešvarus" kodas.

  • 24 Grd '10

tai kas labai nores, vistiek decompilinti sugebes (siais laikais praktiskai viska galima decompiliuoti)

Atsakyti