Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You can automate most of the work with regular python tools. Let's start with clean virtualenv.</p> <pre><code>[zart@feena ~]$ mkdir ziplib-demo [zart@feena ~]$ cd ziplib-demo [zart@feena ziplib-demo]$ virtualenv . New python executable in ./bin/python Installing setuptools.............done. Installing pip...............done. </code></pre> <p>Now let's install set of packages that will go into zipped library. The trick is to force installing them into specific directory.</p> <p>(Note: don't use --egg option either on command-line or in pip.conf/pip.ini because it will break file layout making it non-importable in zip)</p> <pre><code>[zart@feena ziplib-demo]$ bin/pip install --install-option --install-lib=$PWD/unpacked waitress Downloading/unpacking waitress Downloading waitress-0.8.5.tar.gz (112kB): 112kB downloaded Running setup.py egg_info for package waitress Requirement already satisfied (use --upgrade to upgrade): setuptools in ./lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg (from waitress) Installing collected packages: waitress Running setup.py install for waitress Installing waitress-serve script to /home/zart/ziplib-demo/bin Successfully installed waitress Cleaning up... </code></pre> <p><strong>Update</strong>: pip now has <code>-t &lt;path&gt;</code> switch, that does the same thing as <code>--install-option --install-lib=</code>.</p> <p>Now let's pack all of them into one zip</p> <pre><code>[zart@feena ziplib-demo]$ cd unpacked [zart@feena unpacked]$ ls waitress waitress-0.8.5-py2.7.egg-info [zart@feena unpacked]$ zip -r9 ../library.zip * adding: waitress/ (stored 0%) adding: waitress/receiver.py (deflated 71%) adding: waitress/server.pyc (deflated 64%) adding: waitress/utilities.py (deflated 62%) adding: waitress/trigger.pyc (deflated 63%) adding: waitress/trigger.py (deflated 61%) adding: waitress/receiver.pyc (deflated 60%) adding: waitress/adjustments.pyc (deflated 51%) adding: waitress/compat.pyc (deflated 56%) adding: waitress/adjustments.py (deflated 60%) adding: waitress/server.py (deflated 68%) adding: waitress/channel.py (deflated 72%) adding: waitress/task.pyc (deflated 57%) adding: waitress/tests/ (stored 0%) adding: waitress/tests/test_regression.py (deflated 63%) adding: waitress/tests/test_functional.py (deflated 88%) adding: waitress/tests/test_parser.pyc (deflated 76%) adding: waitress/tests/test_trigger.pyc (deflated 73%) adding: waitress/tests/test_init.py (deflated 72%) adding: waitress/tests/test_utilities.pyc (deflated 78%) adding: waitress/tests/test_buffers.pyc (deflated 79%) adding: waitress/tests/test_trigger.py (deflated 82%) adding: waitress/tests/test_buffers.py (deflated 86%) adding: waitress/tests/test_runner.py (deflated 75%) adding: waitress/tests/test_init.pyc (deflated 69%) adding: waitress/tests/__init__.pyc (deflated 21%) adding: waitress/tests/support.pyc (deflated 48%) adding: waitress/tests/test_utilities.py (deflated 73%) adding: waitress/tests/test_channel.py (deflated 87%) adding: waitress/tests/test_task.py (deflated 87%) adding: waitress/tests/test_functional.pyc (deflated 82%) adding: waitress/tests/__init__.py (deflated 5%) adding: waitress/tests/test_compat.pyc (deflated 53%) adding: waitress/tests/test_receiver.pyc (deflated 79%) adding: waitress/tests/test_adjustments.py (deflated 78%) adding: waitress/tests/test_adjustments.pyc (deflated 74%) adding: waitress/tests/test_server.pyc (deflated 73%) adding: waitress/tests/fixtureapps/ (stored 0%) adding: waitress/tests/fixtureapps/filewrapper.pyc (deflated 59%) adding: waitress/tests/fixtureapps/getline.py (deflated 37%) adding: waitress/tests/fixtureapps/nocl.py (deflated 47%) adding: waitress/tests/fixtureapps/sleepy.pyc (deflated 44%) adding: waitress/tests/fixtureapps/echo.py (deflated 40%) adding: waitress/tests/fixtureapps/error.py (deflated 52%) adding: waitress/tests/fixtureapps/nocl.pyc (deflated 48%) adding: waitress/tests/fixtureapps/getline.pyc (deflated 32%) adding: waitress/tests/fixtureapps/writecb.pyc (deflated 42%) adding: waitress/tests/fixtureapps/toolarge.py (deflated 37%) adding: waitress/tests/fixtureapps/__init__.pyc (deflated 20%) adding: waitress/tests/fixtureapps/writecb.py (deflated 50%) adding: waitress/tests/fixtureapps/badcl.pyc (deflated 44%) adding: waitress/tests/fixtureapps/runner.pyc (deflated 58%) adding: waitress/tests/fixtureapps/__init__.py (stored 0%) adding: waitress/tests/fixtureapps/filewrapper.py (deflated 74%) adding: waitress/tests/fixtureapps/runner.py (deflated 41%) adding: waitress/tests/fixtureapps/echo.pyc (deflated 42%) adding: waitress/tests/fixtureapps/groundhog1.jpg (deflated 24%) adding: waitress/tests/fixtureapps/error.pyc (deflated 48%) adding: waitress/tests/fixtureapps/sleepy.py (deflated 42%) adding: waitress/tests/fixtureapps/toolarge.pyc (deflated 43%) adding: waitress/tests/fixtureapps/badcl.py (deflated 45%) adding: waitress/tests/support.py (deflated 52%) adding: waitress/tests/test_task.pyc (deflated 78%) adding: waitress/tests/test_channel.pyc (deflated 78%) adding: waitress/tests/test_regression.pyc (deflated 68%) adding: waitress/tests/test_parser.py (deflated 80%) adding: waitress/tests/test_server.py (deflated 78%) adding: waitress/tests/test_receiver.py (deflated 87%) adding: waitress/tests/test_compat.py (deflated 51%) adding: waitress/tests/test_runner.pyc (deflated 72%) adding: waitress/__init__.pyc (deflated 50%) adding: waitress/channel.pyc (deflated 58%) adding: waitress/runner.pyc (deflated 54%) adding: waitress/buffers.py (deflated 74%) adding: waitress/__init__.py (deflated 61%) adding: waitress/runner.py (deflated 58%) adding: waitress/parser.py (deflated 69%) adding: waitress/compat.py (deflated 69%) adding: waitress/buffers.pyc (deflated 69%) adding: waitress/utilities.pyc (deflated 60%) adding: waitress/parser.pyc (deflated 53%) adding: waitress/task.py (deflated 72%) adding: waitress-0.8.5-py2.7.egg-info/ (stored 0%) adding: waitress-0.8.5-py2.7.egg-info/dependency_links.txt (stored 0%) adding: waitress-0.8.5-py2.7.egg-info/installed-files.txt (deflated 83%) adding: waitress-0.8.5-py2.7.egg-info/top_level.txt (stored 0%) adding: waitress-0.8.5-py2.7.egg-info/PKG-INFO (deflated 65%) adding: waitress-0.8.5-py2.7.egg-info/not-zip-safe (stored 0%) adding: waitress-0.8.5-py2.7.egg-info/SOURCES.txt (deflated 71%) adding: waitress-0.8.5-py2.7.egg-info/entry_points.txt (deflated 33%) adding: waitress-0.8.5-py2.7.egg-info/requires.txt (deflated 5%) [zart@feena unpacked]$ cd .. </code></pre> <p>Note that those files should be at top of zip, you can't just <code>zip -r9 library.zip unpacked</code></p> <p>Checking the result:</p> <pre><code>[zart@feena ziplib-demo]$ PYTHONPATH=library.zip python Python 2.7.1 (r271:86832, Apr 12 2011, 16:15:16) [GCC 4.6.0 20110331 (Red Hat 4.6.0-2)] on linux2 Type "help", "copyright", "credits" or "license" for more information. &gt;&gt;&gt; import waitress &gt;&gt;&gt; waitress &lt;module 'waitress' from '/home/zart/ziplib-demo/library.zip/waitress/__init__.pyc'&gt; &gt;&gt;&gt; &gt;&gt;&gt; from wsgiref.simple_server import demo_app &gt;&gt;&gt; waitress.serve(demo_app) serving on http://0.0.0.0:8080 ^C&gt;&gt;&gt; </code></pre> <p><strong>Update:</strong> since python 3.5 there is also <a href="https://docs.python.org/3/library/zipapp.html" rel="noreferrer" title="zipapp module">zipapp module</a> which can help with bundling the whole package into .pyz file. For more complex needs <a href="http://www.pyinstaller.org/" rel="noreferrer" title="pyinstaller">pyinstaller</a>, <a href="http://www.py2exe.org/" rel="noreferrer" title="py2exe">py2exe</a> or <a href="https://py2app.readthedocs.io/en/latest/" rel="noreferrer" title="py2app">py2app</a> might better fit the bill.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload