Changeset 164

Show
Ignore:
Timestamp:
Tue Oct 11 12:34:57 2005
Author:
giovannibajo
Message:

Make bootloader fully static -- no more issues with MSVCRT71.DLL! (fix ticket #12*)

Files:

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_FromFile, (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_FromFile);  
      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_FromFile);  
      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&#64;hpcf.upr.edu">william&#64;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 &quot;frozen&quot;</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 &quot;frozen&quot;</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: the  
    418   resulting executable will depend on <tt class="docutils literal"><span class="pre">MSVCR71.DLL</span></tt>. This is a standard  
    419   Microsoft library which was not present on older Windows (like Win9x), so  
    420   you are forced to ship it with your application if you need compatibility  
    421   with those operating systems. We plan to fix this issue in a future version  
    422   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="#id13" 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="#id14" 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 &lt;archivefile&gt;  
     
    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="#id15" 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 &lt;executable_or_dynamic_library&gt;  
     
    460 449 </div>  
    461 450 <div class="section">  
    462   <h2><a class="toc-backref" href="#id16" 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 &lt;executable_with_version_resource&gt;  
     
    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="#id17" 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="#id18" 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="#id19" 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="#id20" 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="#id21" 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="#id22" 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="#id23" 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="#id24" 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="#id25" 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="#id26" 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="#id27" 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="#id28" 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="#id29" 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="#id30" 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="#id31" 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="#id32" 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="#id33" 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="#id34" 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="#id35" 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="#id36" 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="#id37" 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