创建一个小瓶子网站的PEX

时间:2016-09-15 20:10:02

标签: python python-pex

我正在尝试创建一个简单的3页烧瓶网站的PEX文件。该网站在python3上使用Gunicorn,客户希望将网站编译为封装的echo "machine github.com login ei-grad password mypasswordshouldbehere" > ~/.netrc pip install "git+https://github.com/ei-grad/my_private_repo.git#egg=my_private_repo" 文件。

pex

也尝试了

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

当我运行该命令时,它编译得很好,但问题是当我尝试运行pex文件时。

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

我尝试了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 命令的不同变体。这是在MacOSX El Capitan上使用python2.7和python3.5

提前感谢您,如果您需要任何额外信息,请告知我们。

项目结构

pex

1 个答案:

答案 0 :(得分:2)

您运行的命令仅包含项目的要求,它们实际上并不指示Pex包含您的代码。要在Pex可执行文件中获取代码,您需要先将其打包,然后指示Pex包含该包。

(无论出于什么原因,Pex不喜欢名字zb1,所以我使用了mypackage代替

<强> 1。打包您的代码:

在顶层创建setup.py文件:

#!/usr/bin/env python

from setuptools import setup

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

将您的代码移至与您的包名称相同的子目录:

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

创建wheel file

pip3 wheel -w . .

这将创建一个包含所有代码mypackage-1.0.0-py3-none-any.whl

的文件

<强> 2。运行Pex包括您的包裹:

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

请注意,可执行文件是使用包和模块之间的点来指定的。