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.
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...
Išbandžiau ir aš:
Tik niekaip nesuprantu, kam tau to reikia? Mano manymu, tai kažkoks bereikalingas apsunkinimas... Tuo labiau, tas sukompiliuotas failas yra paprasčiausias zip archyvas:
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.
Sukompiliavo... Veikia, bet tik toje konkrečioje sukompiliuotoje dist kataloge.. su daug *.so failų, negali kaip nors be jų?
a, reikėjo --no-copy-deps primesti.
abrius, o kam tau iš vis to reikia?
Nenoriu, kad matytų kodo. "Nešvarus" kodas.
tai kas labai nores, vistiek decompilinti sugebes (siais laikais praktiskai viska galima decompiliuoti)
Tema perkelta iš https://legacy.ubuntu.lt/forum/viewtopic.php?f=11&t=6493