我正在尝试创建一个简单的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
答案 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
请注意,可执行文件是使用包和模块之间的点来指定的。