【问题标题】:Creating a PEX of a small flask website创建一个小烧瓶网站的 PEX
【发布时间】:2017-11-26 08:09:57
【问题描述】:

我正在尝试创建一个简单的 3 页烧瓶网站的 PEX 文件。该网站在 python3 上使用 Gunicorn,客户希望将网站编译为封装的 pex 文件。

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

也试过了

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

当我运行该命令时,它编译得很好,但问题是当我尝试运行 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

我尝试了pex 命令的不同变体。这是在带有 python2.7 和 python3.5 的 MacOSX El Capitan 上

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

项目结构

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

【问题讨论】:

    标签: python python-pex


    【解决方案1】:

    您正在运行的命令仅包含项目的要求,它们实际上并不指示 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
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多