Changeset 164
- Timestamp:
- Tue Oct 11 12:34:57 2005
- Files:
-
- trunk/source/common/launch.h (modified) (diff)
- trunk/source/common/launch.c (modified) (diff)
- trunk/doc/Manual.html (modified) (diff)
- trunk/doc/source/Manual.rst (modified) (diff)
- trunk/doc/CHANGES.txt (modified) (diff)
- trunk/Sconstruct (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
trunk/source/common/launch.h
r43 r164 137 137 EXTDECLPROC(int, PyList_Append, (PyObject *, PyObject *)); 138 138 EXTDECLPROC(PyObject *, Py_BuildValue, (char *, ...)); 139 EXTDECLPROC(PyObject *, PyFile_From File, (FILE *, char *, char *, int));139 EXTDECLPROC(PyObject *, PyFile_FromString, (char *, char *)); 139 139 EXTDECLPROC(PyObject *, PyObject_CallFunction, (PyObject *, char *, ...)); 140 140 EXTDECLPROC(PyObject *, PyModule_GetDict, (PyObject *)); -
trunk/source/common/launch.c
r43 r164 64 64 DECLPROC(PyList_Append); 65 65 DECLPROC(Py_BuildValue); 66 DECLPROC(PyFile_From File);66 DECLPROC(PyFile_FromString); 66 66 DECLPROC(PyObject_CallFunction); 67 67 DECLPROC(PyModule_GetDict); … … 274 274 GETPROC(dll, PyList_Append); 275 275 GETPROC(dll, Py_BuildValue); 276 GETPROC(dll, PyFile_From File);276 GETPROC(dll, PyFile_FromString); 276 276 GETPROC(dll, PyObject_CallFunction); 277 277 GETPROC(dll, PyModule_GetDict); … … 571 571 PyObject *co; 572 572 PyObject *mod; 573 PyObject *res; 574 char buf[32]; 573 575 574 576 VS("importing modules from CArchive\n"); … … 582 584 loadfunc = PyDict_GetItemString(marshaldict, "load"); 583 585 584 /* Make a Python file object from f_fp */ 585 pyfile = PyFile_FromFile(f_fp, f_archivename, "rb+", 0); 586 /* Reopen the archive as a Python file. We cannot use PyFile_FromFile 587 * because that would require this boot-loader and Python DLL to share 588 * the same libc, while they purposely don't. 589 */ 590 fclose(f_fp); 591 pyfile = PyFile_FromString(f_archivename, "rb"); 592 if (PyErr_Occurred()) 593 { 594 PyErr_Print(); 595 return -1; 596 } 586 597 587 598 /* Iterate through toc looking for module entries (type 'm') … … 594 605 VS(ptoc->name); 595 606 VS("\n"); 607 596 608 /* Go to start of Python module (start + 8) and load the code object */ 597 fseek(f_fp, f_pkgstart + ntohl(ptoc->pos) + 8, SEEK_SET); 609 res = PyObject_CallMethod(pyfile, "seek", "(ii)", f_pkgstart + ntohl(ptoc->pos) + 8, 0); 610 Py_XDECREF(res); 611 598 612 co = PyObject_CallFunction(loadfunc, "O", pyfile); 599 613 mod = PyImport_ExecCodeModule(ptoc->name, co); … … 603 617 FATALERROR("mod is NULL - "); 604 618 FATALERROR(ptoc->name); 605 //return -1;606 619 } 607 620 if (PyErr_Occurred()) … … 609 622 PyErr_Print(); 610 623 PyErr_Clear(); 611 //FATALERROR("PyErr loading mod - ");612 //FATALERROR(ptoc->name);613 //return -1;614 624 } 615 625 } 616 626 ptoc = incrementTocPtr(ptoc); 617 627 } 628 629 /* Close the file and release the object. */ 630 res = PyObject_CallMethod(pyfile, "close", "()"); 631 Py_XDECREF(res); 632 Py_DECREF(pyfile); 633 634 /* After closing the python file, we can reopen it as normal file. */ 635 f_fp = fopen(f_archivename, "rb"); 636 if (f_fp == NULL) { 637 VS("Cannot reopen archive: "); 638 VS(f_archivename); 639 VS("\n"); 640 } 618 641 return 0; 619 642 } -
trunk/doc/Manual.html
r117 r164 22 22 <td><a class="first last reference" href="mailto:william@hpcf.upr.edu">william@hpcf.upr.edu</a></td></tr> 23 23 <tr><th class="docinfo-name">Revision:</th> 24 <td> 94</td></tr>24 <td>116</td></tr> 24 24 <tr class="field"><th class="docinfo-name">Source URL:</th><td class="field-body">svn://pyinstaller/trunk/doc/source/Manual.rst</td> 25 25 </tr> … … 42 42 <li><a class="reference" href="#a-note-on-using-upx" id="id10" name="id10">A Note on using UPX</a></li> 43 43 <li><a class="reference" href="#a-note-on-onefile" id="id11" name="id11">A Note on <tt class="docutils literal"><span class="pre">--onefile</span></tt></a></li> 44 <li><a class="reference" href="#onefile-and-python-2-4-for-windows-important" id="id12" name="id12"><tt class="docutils literal"><span class="pre">--onefile</span></tt> and Python 2.4 for Windows (<strong>important</strong>)</a></li>45 44 </ul> 46 45 </li> 47 <li><a class="reference" href="#pyinstaller-utilities" id="id13" name="id13">PyInstaller Utilities</a><ul> 48 <li><a class="reference" href="#archiveviewer" id="id14" name="id14">ArchiveViewer</a></li> 49 <li><a class="reference" href="#bindepend" id="id15" name="id15">bindepend</a></li> 50 <li><a class="reference" href="#grabversion-windows" id="id16" name="id16">GrabVersion (Windows)</a></li> 51 <li><a class="reference" href="#analyzing-dependencies" id="id17" name="id17">Analyzing Dependencies</a></li> 46 <li><a class="reference" href="#pyinstaller-utilities" id="id12" name="id12">PyInstaller Utilities</a><ul> 47 <li><a class="reference" href="#archiveviewer" id="id13" name="id13">ArchiveViewer</a></li> 48 <li><a class="reference" href="#bindepend" id="id14" name="id14">bindepend</a></li> 49 <li><a class="reference" href="#grabversion-windows" id="id15" name="id15">GrabVersion (Windows)</a></li> 50 <li><a class="reference" href="#analyzing-dependencies" id="id16" name="id16">Analyzing Dependencies</a></li> 52 51 </ul> 53 52 </li> 54 <li><a class="reference" href="#spec-files" id="id18" name="id18">Spec Files</a><ul> 55 <li><a class="reference" href="#introduction" id="id19" name="id19">Introduction</a></li> 56 <li><a class="reference" href="#toc-class-table-of-contents" id="id20" name="id20">TOC Class (Table of Contents)</a></li> 57 <li><a class="reference" href="#target-subclasses" id="id21" name="id21">Target Subclasses</a><ul> 58 <li><a class="reference" href="#analysis" id="id22" name="id22">Analysis</a></li> 59 <li><a class="reference" href="#pyz" id="id23" name="id23">PYZ</a></li> 60 <li><a class="reference" href="#pkg" id="id24" name="id24">PKG</a></li> 61 <li><a class="reference" href="#exe" id="id25" name="id25">EXE</a></li> 62 <li><a class="reference" href="#dll" id="id26" name="id26">DLL</a></li> 63 <li><a class="reference" href="#collect" id="id27" name="id27">COLLECT</a></li> 64 <li><a class="reference" href="#tree" id="id28" name="id28">Tree</a></li> 53 <li><a class="reference" href="#spec-files" id="id17" name="id17">Spec Files</a><ul> 54 <li><a class="reference" href="#introduction" id="id18" name="id18">Introduction</a></li> 55 <li><a class="reference" href="#toc-class-table-of-contents" id="id19" name="id19">TOC Class (Table of Contents)</a></li> 56 <li><a class="reference" href="#target-subclasses" id="id20" name="id20">Target Subclasses</a><ul> 57 <li><a class="reference" href="#analysis" id="id21" name="id21">Analysis</a></li> 58 <li><a class="reference" href="#pyz" id="id22" name="id22">PYZ</a></li> 59 <li><a class="reference" href="#pkg" id="id23" name="id23">PKG</a></li> 60 <li><a class="reference" href="#exe" id="id24" name="id24">EXE</a></li> 61 <li><a class="reference" href="#dll" id="id25" name="id25">DLL</a></li> 62 <li><a class="reference" href="#collect" id="id26" name="id26">COLLECT</a></li> 63 <li><a class="reference" href="#tree" id="id27" name="id27">Tree</a></li> 65 64 </ul> 66 65 </li> 67 66 </ul> 68 67 </li> 69 <li><a class="reference" href="#when-things-go-wrong" id="id29" name="id29">When Things Go Wrong</a><ul> 70 <li><a class="reference" href="#finding-out-what-went-wrong" id="id30" name="id30">Finding out What Went Wrong</a><ul> 71 <li><a class="reference" href="#buildtime-warnings" id="id31" name="id31">Buildtime Warnings</a></li> 72 <li><a class="reference" href="#getting-debug-messages" id="id32" name="id32">Getting Debug Messages</a></li> 73 <li><a class="reference" href="#getting-python-s-verbose-imports" id="id33" name="id33">Getting Python's Verbose Imports</a></li> 68 <li><a class="reference" href="#when-things-go-wrong" id="id28" name="id28">When Things Go Wrong</a><ul> 69 <li><a class="reference" href="#finding-out-what-went-wrong" id="id29" name="id29">Finding out What Went Wrong</a><ul> 70 <li><a class="reference" href="#buildtime-warnings" id="id30" name="id30">Buildtime Warnings</a></li> 71 <li><a class="reference" href="#getting-debug-messages" id="id31" name="id31">Getting Debug Messages</a></li> 72 <li><a class="reference" href="#getting-python-s-verbose-imports" id="id32" name="id32">Getting Python's Verbose Imports</a></li> 74 73 </ul> 75 74 </li> 76 <li><a class="reference" href="#helping-installer-find-modules" id="id34" name="id34">Helping Installer Find Modules</a><ul> 77 <li><a class="reference" href="#extending-the-path" id="id35" name="id35">Extending the Path</a></li> 78 <li><a class="reference" href="#listing-hidden-imports" id="id36" name="id36">Listing Hidden Imports</a></li> 79 <li><a class="reference" href="#extending-a-package-s-path" id="id37" name="id37">Extending a Package's <tt class="docutils literal"><span class="pre">__path__</span></tt></a></li> 80 <li><a class="reference" href="#changing-runtime-behavior" id="id38" name="id38">Changing Runtime Behavior</a></li> 81 <li><a class="reference" href="#adapting-to-being-frozen" id="id39" name="id39">Adapting to being "frozen"</a></li> 82 <li><a class="reference" href="#accessing-data-files" id="id40" name="id40">Accessing Data Files</a></li> 75 <li><a class="reference" href="#helping-installer-find-modules" id="id33" name="id33">Helping Installer Find Modules</a><ul> 76 <li><a class="reference" href="#extending-the-path" id="id34" name="id34">Extending the Path</a></li> 77 <li><a class="reference" href="#listing-hidden-imports" id="id35" name="id35">Listing Hidden Imports</a></li> 78 <li><a class="reference" href="#extending-a-package-s-path" id="id36" name="id36">Extending a Package's <tt class="docutils literal"><span class="pre">__path__</span></tt></a></li> 79 <li><a class="reference" href="#changing-runtime-behavior" id="id37" name="id37">Changing Runtime Behavior</a></li> 80 <li><a class="reference" href="#adapting-to-being-frozen" id="id38" name="id38">Adapting to being "frozen"</a></li> 81 <li><a class="reference" href="#accessing-data-files" id="id39" name="id39">Accessing Data Files</a></li> 83 82 </ul> 84 83 </li> 85 84 </ul> 86 85 </li> 87 <li><a class="reference" href="#miscellaneous" id="id41" name="id41">Miscellaneous</a><ul> 88 <li><a class="reference" href="#pmw-python-mega-widgets" id="id42" name="id42">Pmw -- Python Mega Widgets</a></li> 89 <li><a class="reference" href="#win9xpopen" id="id43" name="id43">Win9xpopen</a></li> 90 <li><a class="reference" href="#self-extracting-executables" id="id44" name="id44">Self-extracting executables</a><ul> 91 <li><a class="reference" href="#one-pass-execution" id="id45" name="id45">One Pass Execution</a></li> 92 <li><a class="reference" href="#two-pass-execution" id="id46" name="id46">Two Pass Execution</a></li> 86 <li><a class="reference" href="#miscellaneous" id="id40" name="id40">Miscellaneous</a><ul> 87 <li><a class="reference" href="#pmw-python-mega-widgets" id="id41" name="id41">Pmw -- Python Mega Widgets</a></li> 88 <li><a class="reference" href="#win9xpopen" id="id42" name="id42">Win9xpopen</a></li> 89 <li><a class="reference" href="#self-extracting-executables" id="id43" name="id43">Self-extracting executables</a><ul> 90 <li><a class="reference" href="#one-pass-execution" id="id44" name="id44">One Pass Execution</a></li> 91 <li><a class="reference" href="#two-pass-execution" id="id45" name="id45">Two Pass Execution</a></li> 93 92 </ul> 94 93 </li> 95 94 </ul> 96 95 </li> 97 <li><a class="reference" href="#pyinstaller-archives" id="id47" name="id47">PyInstaller Archives</a><ul> 98 <li><a class="reference" href="#archives-introduction" id="id48" name="id48">Archives Introduction</a></li> 99 <li><a class="reference" href="#zlibarchive" id="id49" name="id49"><tt class="docutils literal"><span class="pre">ZlibArchive</span></tt></a></li> 100 <li><a class="reference" href="#carchive" id="id50" name="id50"><tt class="docutils literal"><span class="pre">CArchive</span></tt></a></li> 96 <li><a class="reference" href="#pyinstaller-archives" id="id46" name="id46">PyInstaller Archives</a><ul> 97 <li><a class="reference" href="#archives-introduction" id="id47" name="id47">Archives Introduction</a></li> 98 <li><a class="reference" href="#zlibarchive" id="id48" name="id48"><tt class="docutils literal"><span class="pre">ZlibArchive</span></tt></a></li> 99 <li><a class="reference" href="#carchive" id="id49" name="id49"><tt class="docutils literal"><span class="pre">CArchive</span></tt></a></li> 101 100 </ul> 102 101 </li> 103 <li><a class="reference" href="#license" id="id51" name="id51">License</a></li> 104 <li><a class="reference" href="#appendix" id="id52" name="id52">Appendix</a><ul> 105 <li><a class="reference" href="#mf-py-a-modulefinder-replacement" id="id53" name="id53"><tt class="docutils literal"><span class="pre">mf.py</span></tt>: A Modulefinder Replacement</a><ul> 106 <li><a class="reference" href="#importtracker" id="id54" name="id54">ImportTracker</a></li> 107 <li><a class="reference" href="#analyze-one" id="id55" name="id55"><tt class="docutils literal"><span class="pre">analyze_one()</span></tt></a></li> 108 <li><a class="reference" href="#module-classes" id="id56" name="id56">Module Classes</a></li> 109 <li><a class="reference" href="#code-scanning" id="id57" name="id57">code scanning</a></li> 110 <li><a class="reference" href="#hooks" id="id58" name="id58">Hooks</a></li> 111 <li><a class="reference" href="#warnings" id="id59" name="id59">Warnings</a></li> 112 <li><a class="reference" href="#cross-reference" id="id60" name="id60">Cross Reference</a></li> 113 <li><a class="reference" href="#usage" id="id61" name="id61">Usage</a></li> 102 <li><a class="reference" href="#license" id="id50" name="id50">License</a></li> 103 <li><a class="reference" href="#appendix" id="id51" name="id51">Appendix</a><ul> 104 <li><a class="reference" href="#mf-py-a-modulefinder-replacement" id="id52" name="id52"><tt class="docutils literal"><span class="pre">mf.py</span></tt>: A Modulefinder Replacement</a><ul> 105 <li><a class="reference" href="#importtracker" id="id53" name="id53">ImportTracker</a></li> 106 <li><a class="reference" href="#analyze-one" id="id54" name="id54"><tt class="docutils literal"><span class="pre">analyze_one()</span></tt></a></li> 107 <li><a class="reference" href="#module-classes" id="id55" name="id55">Module Classes</a></li> 108 <li><a class="reference" href="#code-scanning" id="id56" name="id56">code scanning</a></li> 109 <li><a class="reference" href="#hooks" id="id57" name="id57">Hooks</a></li> 110 <li><a class="reference" href="#warnings" id="id58" name="id58">Warnings</a></li> 111 <li><a class="reference" href="#cross-reference" id="id59" name="id59">Cross Reference</a></li> 112 <li><a class="reference" href="#usage" id="id60" name="id60">Usage</a></li> 114 113 </ul> 115 114 </li> 116 <li><a class="reference" href="#iu-py-an-imputil-replacement" id="id62" name="id62"><tt class="docutils literal"><span class="pre">iu.py</span></tt>: An <em>imputil</em> Replacement</a><ul> 117 <li><a class="reference" href="#importmanager" id="id63" name="id63"><tt class="docutils literal"><span class="pre">ImportManager</span></tt></a></li> 118 <li><a class="reference" href="#importdirector" id="id64" name="id64"><tt class="docutils literal"><span class="pre">ImportDirector</span></tt></a></li> 119 <li><a class="reference" href="#pathimportdirector" id="id65" name="id65"><tt class="docutils literal"><span class="pre">PathImportDirector</span></tt></a></li> 120 <li><a class="reference" href="#owner" id="id66" name="id66"><tt class="docutils literal"><span class="pre">Owner</span></tt></a></li> 121 <li><a class="reference" href="#packages" id="id67" name="id67">Packages</a></li> 122 <li><a class="reference" href="#possibilities" id="id68" name="id68">Possibilities</a></li> 123 <li><a class="reference" href="#compatibility" id="id69" name="id69">Compatibility</a></li> 124 <li><a class="reference" href="#performance" id="id70" name="id70">Performance</a></li> 125 <li><a class="reference" href="#limitations" id="id71" name="id71">Limitations</a></li> 126 <li><a class="reference" href="#id1" id="id72" name="id72">Usage</a></li> 115 <li><a class="reference" href="#iu-py-an-imputil-replacement" id="id61" name="id61"><tt class="docutils literal"><span class="pre">iu.py</span></tt>: An <em>imputil</em> Replacement</a><ul> 116 <li><a class="reference" href="#importmanager" id="id62" name="id62"><tt class="docutils literal"><span class="pre">ImportManager</span></tt></a></li> 117 <li><a class="reference" href="#importdirector" id="id63" name="id63"><tt class="docutils literal"><span class="pre">ImportDirector</span></tt></a></li> 118 <li><a class="reference" href="#pathimportdirector" id="id64" name="id64"><tt class="docutils literal"><span class="pre">PathImportDirector</span></tt></a></li> 119 <li><a class="reference" href="#owner" id="id65" name="id65"><tt class="docutils literal"><span class="pre">Owner</span></tt></a></li> 120 <li><a class="reference" href="#packages" id="id66" name="id66">Packages</a></li> 121 <li><a class="reference" href="#possibilities" id="id67" name="id67">Possibilities</a></li> 122 <li><a class="reference" href="#compatibility" id="id68" name="id68">Compatibility</a></li> 123 <li><a class="reference" href="#performance" id="id69" name="id69">Performance</a></li> 124 <li><a class="reference" href="#limitations" id="id70" name="id70">Limitations</a></li> 125 <li><a class="reference" href="#id1" id="id71" name="id71">Usage</a></li> 127 126 </ul> 128 127 </li> … … 413 412 <p><a class="reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 414 413 </div> 415 <div class="section">416 <h2><a class="toc-backref" href="#id12" id="onefile-and-python-2-4-for-windows-important" name="onefile-and-python-2-4-for-windows-important"><tt class="docutils literal docutils literal"><span class="pre">--onefile</span></tt> and Python 2.4 for Windows (<strong>important</strong>)</a></h2>417 <p>Currently, there is an issue when using <tt class="docutils literal"><span class="pre">--onefile</span></tt> with Python 2.4: the418 resulting executable will depend on <tt class="docutils literal"><span class="pre">MSVCR71.DLL</span></tt>. This is a standard419 Microsoft library which was not present on older Windows (like Win9x), so420 you are forced to ship it with your application if you need compatibility421 with those operating systems. We plan to fix this issue in a future version422 of PyInstaller (consult our <a class="reference" href="http://pyinstaller.hpcf.upr.edu/pyinstaller/roadmap">Roadmap</a> for more information).</p>423 <p><a class="reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>424 </div>425 414 </div> 426 415 <div class="section"> 427 <h1><a class="toc-backref" href="#id1 3" id="pyinstaller-utilities" name="pyinstaller-utilities">PyInstaller Utilities</a></h1>416 <h1><a class="toc-backref" href="#id12" id="pyinstaller-utilities" name="pyinstaller-utilities">PyInstaller Utilities</a></h1> 427 416 <div class="section"> 428 <h2><a class="toc-backref" href="#id1 4" id="archiveviewer" name="archiveviewer">ArchiveViewer</a></h2>417 <h2><a class="toc-backref" href="#id13" id="archiveviewer" name="archiveviewer">ArchiveViewer</a></h2> 428 417 <pre class="literal-block"> 429 418 python ArchiveViewer.py <archivefile> … … 446 435 <dd>Quit.</dd> 447 436 </dl> 448 <p><a class="reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>437 <p><a class="reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 448 437 </div> 449 438 <div class="section"> 450 <h2><a class="toc-backref" href="#id1 5" id="bindepend" name="bindepend">bindepend</a></h2>439 <h2><a class="toc-backref" href="#id14" id="bindepend" name="bindepend">bindepend</a></h2> 450 439 <pre class="literal-block"> 451 440 python bindepend.py <executable_or_dynamic_library> … … 460 449 </div> 461 450 <div class="section"> 462 <h2><a class="toc-backref" href="#id1 6" id="grabversion-windows" name="grabversion-windows">GrabVersion (Windows)</a></h2>451 <h2><a class="toc-backref" href="#id15" id="grabversion-windows" name="grabversion-windows">GrabVersion (Windows)</a></h2> 462 451 <pre class="literal-block"> 463 452 python GrabVersion.py <executable_with_version_resource> … … 479 468 information you want, grab it's resource and edit it. Certainly easier than 480 469 the Version resource wizard in VC++.</p> 481 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>470 <p><a class="reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 481 470 </div> 482 471 <div class="section"> 483 <h2><a class="toc-backref" href="#id1 7" id="analyzing-dependencies" name="analyzing-dependencies">Analyzing Dependencies</a></h2>472 <h2><a class="toc-backref" href="#id16" id="analyzing-dependencies" name="analyzing-dependencies">Analyzing Dependencies</a></h2> 483 472 <p>You can interactively track down dependencies, including getting 484 473 cross-references by using <tt class="docutils literal"><span class="pre">mf.py</span></tt>, documented in section <a class="reference" href="#mf-py-a-modulefinder-replacement">mf.py: A modulefinder 485 474 Replacement</a></p> 486 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>475 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 486 475 </div> 487 476 </div> 488 477 <div class="section"> 489 <h1><a class="toc-backref" href="#id1 8" id="spec-files" name="spec-files">Spec Files</a></h1>478 <h1><a class="toc-backref" href="#id17" id="spec-files" name="spec-files">Spec Files</a></h1> 489 478 <div class="section"> 490 <h2><a class="toc-backref" href="#id1 9" id="introduction" name="introduction">Introduction</a></h2>479 <h2><a class="toc-backref" href="#id18" id="introduction" name="introduction">Introduction</a></h2> 490 479 <p>Spec files are in Python syntax. They are evaluated by Build.py. A simplistic 491 480 spec file might look like this:</p> … … 525 514 single-file deployment, the binaries. In a single-directory deployment, a 526 515 directory is built containing a slim executable and the binaries.</p> 527 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>516 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 527 516 </div> 528 517 <div class="section"> 529 <h2><a class="toc-backref" href="#id 20" id="toc-class-table-of-contents" name="toc-class-table-of-contents">TOC Class (Table of Contents)</a></h2>518 <h2><a class="toc-backref" href="#id19" id="toc-class-table-of-contents" name="toc-class-table-of-contents">TOC Class (Table of Contents)</a></h2> 529 518 <p>Before you can do much with a spec file, you need to understand the 530 519 <tt class="docutils literal"><span class="pre">TOC</span></tt> (Table Of Contents) class.</p> … … 673 662 multiple executables with minimal redundancy. You'll need some top level code 674 663 in each executable to mount the common <tt class="docutils literal"><span class="pre">PYZ</span></tt>.</p> 675 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>664 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 675 664 </div> 676 665 <div class="section"> 677 <h2><a class="toc-backref" href="#id2 1" id="target-subclasses" name="target-subclasses">Target Subclasses</a></h2>666 <h2><a class="toc-backref" href="#id20" id="target-subclasses" name="target-subclasses">Target Subclasses</a></h2> 677 666 <div class="section"> 678 <h3><a class="toc-backref" href="#id2 2" id="analysis" name="analysis">Analysis</a></h3>667 <h3><a class="toc-backref" href="#id21" id="analysis" name="analysis">Analysis</a></h3> 678 667 <pre class="literal-block"> 679 668 Analysis(scripts, pathex=None, hookspath=None, excludes=None) … … 705 694 any shared lib in <tt class="docutils literal"><span class="pre">/lib</span></tt> or <tt class="docutils literal"><span class="pre">/usr/lib</span></tt> is excluded.</dd> 706 695 </dl> 707 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>696 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 707 696 </div> 708 697 <div class="section"> 709 <h3><a class="toc-backref" href="#id2 3" id="pyz" name="pyz">PYZ</a></h3>698 <h3><a class="toc-backref" href="#id22" id="pyz" name="pyz">PYZ</a></h3> 709 698 <pre class="literal-block"> 710 699 PYZ(toc, name=None, level=9) … … 720 709 <dd>The Zlib compression level to use. If 0, the zlib module is not required.</dd> 721 710 </dl> 722 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>711 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 722 711 </div> 723 712 <div class="section"> 724 <h3><a class="toc-backref" href="#id2 4" id="pkg" name="pkg">PKG</a></h3>713 <h3><a class="toc-backref" href="#id23" id="pkg" name="pkg">PKG</a></h3> 724 713 <p>Generally, you will not need to create your own <tt class="docutils literal"><span class="pre">PKGs</span></tt>, as the <tt class="docutils literal"><span class="pre">EXE</span></tt> will do it for 725 714 you. This is one way to include read-only data in a single-file deployment, … … 743 732 forwarded to its container (usually a <tt class="docutils literal"><span class="pre">COLLECT</span></tt>).</dd> 744 733 </dl> 745 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>734 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 745 734 </div> 746 735 <div class="section"> 747 <h3><a class="toc-backref" href="#id2 5" id="exe" name="exe">EXE</a></h3>736 <h3><a class="toc-backref" href="#id24" id="exe" name="exe">EXE</a></h3> 747 736 <pre class="literal-block"> 748 737 EXE(*args, **kws) … … 783 772 as <tt class="docutils literal"><span class="pre">EXE</span></tt> is determined by a flag in <tt class="docutils literal"><span class="pre">config.dat</span></tt>. This flag is set to 784 773 non-ELF when using <tt class="docutils literal"><span class="pre">Make.py</span> <span class="pre">-n</span></tt>.</p> 785 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>774 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 785 774 </div> 786 775 <div class="section"> 787 <h3><a class="toc-backref" href="#id2 6" id="dll" name="dll">DLL</a></h3>776 <h3><a class="toc-backref" href="#id25" id="dll" name="dll">DLL</a></h3> 787 776 <p>On Windows, this provides support for doing in-process COM servers. It is not 788 777 generalized. However, embedders can follow the same model to build a special … … 792 781 write your own dll, but thanks to Allan Green for refactoring the C code and 793 782 making that a managable task.</p> 794 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>783 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 794 783 </div> 795 784 <div class="section"> 796 <h3><a class="toc-backref" href="#id2 7" id="collect" name="collect">COLLECT</a></h3>785 <h3><a class="toc-backref" href="#id26" id="collect" name="collect">COLLECT</a></h3> 796 785 <pre class="literal-block"> 797 786 COLLECT(*args, **kws) … … 810 799 </dd> 811 800 </dl> 812 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>801 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 812 801 </div> 813 802 <div class="section"> 814 <h3><a class="toc-backref" href="#id2 8" id="tree" name="tree">Tree</a></h3>803 <h3><a class="toc-backref" href="#id27" id="tree" name="tree">Tree</a></h3> 814 803 <pre class="literal-block"> 815 804 Tree(root, prefix=None, excludes=None) … … 834 823 <p>Since a <tt class="docutils literal"><span class="pre">Tree</span></tt> is a <tt class="docutils literal"><span class="pre">TOC</span></tt>, you can also use the exclude technique described above 835 824 in the section on <tt class="docutils literal"><span class="pre">TOCs</span></tt>.</p> 836 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>825 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 836 825 </div> 837 826 </div> 838 827 </div> 839 828 <div class="section"> 840 <h1><a class="toc-backref" href="#id2 9" id="when-things-go-wrong" name="when-things-go-wrong">When Things Go Wrong</a></h1>829 <h1><a class="toc-backref" href="#id28" id="when-things-go-wrong" name="when-things-go-wrong">When Things Go Wrong</a></h1> 840 829 <div class="section"> 841 <h2><a class="toc-backref" href="#id 30" id="finding-out-what-went-wrong" name="finding-out-what-went-wrong">Finding out What Went Wrong</a></h2>830 <h2><a class="toc-backref" href="#id29" id="finding-out-what-went-wrong" name="finding-out-what-went-wrong">Finding out What Went Wrong</a></h2> 841 830 <div class="section"> 842 <h3><a class="toc-backref" href="#id3 1" id="buildtime-warnings" name="buildtime-warnings">Buildtime Warnings</a></h3>831 <h3><a class="toc-backref" href="#id30" id="buildtime-warnings" name="buildtime-warnings">Buildtime Warnings</a></h3> 842 831 <p>When an <tt class="docutils literal"><span class="pre">Analysis</span></tt> step runs, it produces a warnings file (named <tt class="docutils literal"><span class="pre">warnproject.txt</span></tt>) 843 832 in the spec file's directory. Generally, most of these warnings are harmless. … … 870 859 <p>Any problem detected here can be handled by hooking the analysis of the module. 871 860 See <a class="reference" href="#listing-hidden-imports">Listing Hidden Imports</a> below for how to do it.</p> 872 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>861 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 872 861 </div> 873 862 <div class="section"> 874 <h3><a class="toc-backref" href="#id3 2" id="getting-debug-messages" name="getting-debug-messages">Getting Debug Messages</a></h3>863 <h3><a class="toc-backref" href="#id31" id="getting-debug-messages" name="getting-debug-messages">Getting Debug Messages</a></h3> 874 863 <p>Setting <tt class="docutils literal"><span class="pre">debug=1</span></tt> on an <tt class="docutils literal"><span class="pre">EXE</span></tt> will cause the executable to put out progress 875 864 messages (for console apps, these go to stdout; for Windows apps, these show as 876 865 MessageBoxes). This can be useful if you are doing complex packaging, or your 877 866 app doesn't seem to be starting, or just to learn how the runtime works.</p> 878 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>867 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 878 867 </div> 879 868 <div class="section"> 880 <h3><a class="toc-backref" href="#id3 3" id="getting-python-s-verbose-imports" name="getting-python-s-verbose-imports">Getting Python's Verbose Imports</a></h3>869 <h3><a class="toc-backref" href="#id32" id="getting-python-s-verbose-imports" name="getting-python-s-verbose-imports">Getting Python's Verbose Imports</a></h3> 880 869 <p>You can also pass a <tt class="docutils literal"><span class="pre">-v</span></tt> (verbose imports) flag to the embedded Python. This can 881 870 be extremely useful. I usually try it even on apparently working apps, just to … … 897 886 <p>These messages will always go to <tt class="docutils literal"><span class="pre">stdout</span></tt>, so you won't see them on Windows if 898 887 <tt class="docutils literal"><span class="pre">console=0</span></tt>.</p> 899 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>888 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 899 888 </div> 900 889 </div> 901 890 <div class="section"> 902 <h2><a class="toc-backref" href="#id3 4" id="helping-installer-find-modules" name="helping-installer-find-modules">Helping Installer Find Modules</a></h2>891 <h2><a class="toc-backref" href="#id33" id="helping-installer-find-modules" name="helping-installer-find-modules">Helping Installer Find Modules</a></h2> 902 891 <div class="section"> 903 <h3><a class="toc-backref" href="#id3 5" id="extending-the-path" name="extending-the-path">Extending the Path</a></h3>892 <h3><a class="toc-backref" href="#id34" id="extending-the-path" name="extending-the-path">Extending the Path</a></h3> 903 892 <p>When the analysis phase cannot find needed modules, it may be that the code is 904 893 manipulating <tt class="docutils literal"><span class="pre">sys.path</span></tt>. The easiest thing to do in this case is tell <tt class="docutils literal"><span class="pre">Analysis</span></tt> … … 920 909 </pre> 921 910 <p>(on *nix, use <tt class="docutils literal"><span class="pre">:</span></tt> as the path separator).</p> 922 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>911 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 922 911 </div> 923 912 <div class="section"> 924 <h3><a class="toc-backref" href="#id3 6" id="listing-hidden-imports" name="listing-hidden-imports">Listing Hidden Imports</a></h3>913 <h3><a class="toc-backref" href="#id35" id="listing-hidden-imports" name="listing-hidden-imports">Listing Hidden Imports</a></h3> 924 913 <p>Hidden imports are fairly common. These can occur when the code is using 925 914 <tt class="docutils literal"><span class="pre">__import__</span></tt> (or, perhaps <tt class="docutils literal"><span class="pre">exec</span></tt> or <tt class="docutils literal"><span class="pre">eval</span></tt>), in which case you will see a warning in … … 955 944 <p>If you successfully hook a publicly distributed module in this way, please send 956 945 us the hook so we can make it available to others.</p> 957 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p>946 <p><a class="reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference" href="#pyinstaller-manual">Back to Top</a></p> 957 946 </div> 958 947 <div class="section"> 959 <h3><a class="toc-backref" href="#id3 7" id="extending-a-package-s-path" name="extending-a-package-s-path">Extending a Package's <tt class="docutils literal docutils literal"><span class="pre">__path__</span></tt></a></h3>948 <h3><a class="toc-backref" href="#id36" id="extending-a-package-s-path" name="extending-a-package-s-path">Extending a Package's <tt class="docutils literal docutils literal"><span class="pre">__path__</span></tt></a></h3> 959 948 <p>Python allows a package to extend the search path used to find modules and 960 949
