2016-09-15 1 views
7

Ich versuche, eine PEX-Datei einer einfachen 3-Seiten-Website zu erstellen. Die Website arbeitet mit Gunicorn auf python3, der Client möchte die Site zu einer gekapselten pex Datei kompilieren.Erstellen einer PEX von einer kleinen Flasche Website

pex -r zb1/requirements.txt -e zb1/run -o zb1.pex

auch versucht

pex -r zb1/requirements.txt -m zb1:run -o zb1.pex

Wenn ich das Kommando führen Sie es einfach gut kompiliert, aber das Problem ist, wenn ich eine PEX-Datei auszuführen versuchen.

c:~ c$ ./zb1.pex 
Traceback (most recent call last): 
    File ".bootstrap/_pex/pex.py", line 326, in execute 
    File ".bootstrap/_pex/pex.py", line 258, in _wrap_coverage 
    File ".bootstrap/_pex/pex.py", line 290, in _wrap_profiling 
    File ".bootstrap/_pex/pex.py", line 369, in _execute 
    File ".bootstrap/_pex/pex.py", line 427, in execute_entry 
    File ".bootstrap/_pex/pex.py", line 432, in execute_module 
    File "/usr/local/Cellar/python3/3.5.2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/runpy.py", line 192, in run_module 
    mod_name, mod_spec, code = _get_module_details(mod_name) 
    File "/usr/local/Cellar/python3/3.5.2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/runpy.py", line 127, in _get_module_details 
    raise error("No module named %s" % mod_name) 
ImportError: No module named zb1/run 

Ich habe verschiedene Varianten der pex Befehle ausprobiert. Dies ist auf MacOSX El Capitan mit Python2.7 und Python3.5

Vielen Dank im Voraus und lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen.

Projektstruktur

zb1 
├── README.md 
├── __init__.py 
├── application 
│   ├── config.py 
│   ├── static 
│   ├── templates 
│   ├── uploads 
│   ├── utilities 
│   └── zbo 
├── buildup.py 
├── env 
├── requirements.txt 
├── run.py << ENTRY POINT! 
└── setup.sh 

Antwort

0

Die Befehle, die Sie nur ausgeführt werden, werden die Anforderungen für Ihr Projekt einschließlich, sie anweisen, nicht wirklich Pex Code enthalten. Um Ihren Code in die ausführbare Pex-Datei zu bekommen, müssen Sie ihn zuerst packen und dann Pex anweisen, das Paket einzubinden.

(aus irgendeinem Grund Pex den Namen nicht gefallen hat zb1 ich mypackage stattdessen so verwendet)

1. Package Code:

eine setup.py Datei auf der obersten Ebene erstellen:

#!/usr/bin/env python 

from setuptools import setup 

setup(
    name='mypackage', 
    packages = ['mypackage'], 
    version='1.0.0') 

Verschieben Sie Ihren Code in ein Unterverzeichnis mit demselben Namen wie Ihr Paket:

mypackage 
├── mypackage 
│ ├── __init__.py 
│ ├──application 
│ │ ├── config.py 
│ │ ├── static 
│ │ ├── templates 
│ │ ├── uploads 
│ │ ├── utilities 
│ │ └── zbo 
│ ├── buildup.py 
│ └── run.py 
├── env 
├── requirements.txt 
├── setup.py 
└── setup.sh 

erstellen wheel file:

pex --python=python3 -r requirements.txt -f . mypackage -e mypackage.run -o mypackage.pex 

Hinweis:

pip3 wheel -w . . 

Dies wird eine Datei mit allen Ihrem Code mypackage-1.0.0-py3-none-any.whl

2. Run Pex einschließlich Ihrem Paket mit dem Namen erstellen dass die ausführbare Datei mit einem Punkt zwischen dem Paket und dem Modul angegeben wird.

Verwandte Themen