在 PEX 文件上创建入口点时出现问题
Problems creating entrypoint on PEX file
我目前正在尝试创建一个带有 Python 文件入口点的 pex 文件。
我的文件夹结构如下所示:
├── readme.md
├── requirements.txt
├── setup.py
├── stv
│ ├── adminuser.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── adminuser.cpython-39.pyc
│ │ ├── __init__.cpython-39.pyc
│ │ ├── sequenceGenerator.cpython-39.pyc
│ │ ├── servicetracevisualizer.cpython-39.pyc
│ │ └── traceloader.cpython-39.pyc
│ ├── sequenceGenerator.py
│ ├── servicetracevisualizer.py
│ └── traceloader.py
└── stvcli.py
所以我尝试制作一个包含所有文件的 pex 文件,之后我通过解压缩验证了所有文件。
我的问题是我无法为该文件设置入口点:
stvcli.py
下面是stvcli.py的实现:
import argparse
import logging
from stv import servicetracevisualizer
import os
import sys
#print args
parser = argparse.ArgumentParser(description='Service Trace Visualizer interface.')
parser.add_argument('--renderurls', dest="renderurls", action="store_true",
help='do not try to render operations basend on mapping-table but print urls directly [True, False (default)]')
parser.add_argument('--includeuseless', dest="includeuseless", action="store_true",
help='include insignificant requests from sequence chart (e.g. successful Unified Auth) [True, False (default)]')
parser.add_argument('--outfolder', metavar='outfolder', type=str,
help='folder for saving resulting files (default is folder of inputfile)')
parser.add_argument('--loglevel', metavar='loglevel', type=str, default="INFO",
help='select loglevel: [CRITICAL, ERROR, WARNING, INFO (default), DEBUG, NOTSET]')
parser.add_argument('--filename', metavar='filename', type=str, required=True,
help='input filename')
args = parser.parse_args()
#set args
renderOperations = not args.renderurls
removeUseless = not args.includeuseless
filename = args.filename
if args.outfolder is None:
outfolder = os.path.dirname(filename)
else:
outfolder = args.outfolder
loglevel = logging._nameToLevel[args.loglevel]
#add trailing "/" to outpath
if outfolder[:-1] != "/":
outfolder = outfolder + "/"
#create dirs if outpath does not exist
if not os.path.exists(outfolder):
os.makedirs(outfolder)
#initialize logger
logging.basicConfig(level=loglevel, filename = outfolder + os.path.basename(filename)+".log")
log = logging.getLogger(__name__)
try:
log.info("init stv")
stv = servicetracevisualizer.serviceTraceVisualizer(renderOperations=renderOperations, removeUseless=removeUseless, outfolder=outfolder)
log.info("render file " + filename)
exitcode = stv.renderFile(filename)
except Exception as e:
log.error(e)
exitcode = 100 #TODO custom Error codes
log.info("exitcode " + str(exitcode))
sys.exit(exitcode)
我使用 stvcli.py 创建 PEX 文件的尝试如下:
pex -e stvcli:stvcli -r requirements.txt -o stvcli.pex
但是在启动时它只给我一个 ModuleNotFoundError: No module named 'stvcli',
当 stvcli 明确存在时!
如何将我的 Python 文件作为我的入口点?
有问题,我会第一时间为您解答!
我找到了问题的答案!
要在 pex 文件上设置 .py 文件的入口点,请使用 -c 命令!
e.g. pex . -r requirements.txt -c main.py -o test.pex
官方文档真的很复杂很笨重!
这里有一篇博客,非常详细地描述了成功创建 pex 文件所需的步骤!
https://www.shearn89.com/2021/04/15/pex-file-creation
这对我帮助很大,希望对你也有帮助!
我目前正在尝试创建一个带有 Python 文件入口点的 pex 文件。
我的文件夹结构如下所示:
├── readme.md
├── requirements.txt
├── setup.py
├── stv
│ ├── adminuser.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── adminuser.cpython-39.pyc
│ │ ├── __init__.cpython-39.pyc
│ │ ├── sequenceGenerator.cpython-39.pyc
│ │ ├── servicetracevisualizer.cpython-39.pyc
│ │ └── traceloader.cpython-39.pyc
│ ├── sequenceGenerator.py
│ ├── servicetracevisualizer.py
│ └── traceloader.py
└── stvcli.py
所以我尝试制作一个包含所有文件的 pex 文件,之后我通过解压缩验证了所有文件。
我的问题是我无法为该文件设置入口点:
stvcli.py
下面是stvcli.py的实现:
import argparse
import logging
from stv import servicetracevisualizer
import os
import sys
#print args
parser = argparse.ArgumentParser(description='Service Trace Visualizer interface.')
parser.add_argument('--renderurls', dest="renderurls", action="store_true",
help='do not try to render operations basend on mapping-table but print urls directly [True, False (default)]')
parser.add_argument('--includeuseless', dest="includeuseless", action="store_true",
help='include insignificant requests from sequence chart (e.g. successful Unified Auth) [True, False (default)]')
parser.add_argument('--outfolder', metavar='outfolder', type=str,
help='folder for saving resulting files (default is folder of inputfile)')
parser.add_argument('--loglevel', metavar='loglevel', type=str, default="INFO",
help='select loglevel: [CRITICAL, ERROR, WARNING, INFO (default), DEBUG, NOTSET]')
parser.add_argument('--filename', metavar='filename', type=str, required=True,
help='input filename')
args = parser.parse_args()
#set args
renderOperations = not args.renderurls
removeUseless = not args.includeuseless
filename = args.filename
if args.outfolder is None:
outfolder = os.path.dirname(filename)
else:
outfolder = args.outfolder
loglevel = logging._nameToLevel[args.loglevel]
#add trailing "/" to outpath
if outfolder[:-1] != "/":
outfolder = outfolder + "/"
#create dirs if outpath does not exist
if not os.path.exists(outfolder):
os.makedirs(outfolder)
#initialize logger
logging.basicConfig(level=loglevel, filename = outfolder + os.path.basename(filename)+".log")
log = logging.getLogger(__name__)
try:
log.info("init stv")
stv = servicetracevisualizer.serviceTraceVisualizer(renderOperations=renderOperations, removeUseless=removeUseless, outfolder=outfolder)
log.info("render file " + filename)
exitcode = stv.renderFile(filename)
except Exception as e:
log.error(e)
exitcode = 100 #TODO custom Error codes
log.info("exitcode " + str(exitcode))
sys.exit(exitcode)
我使用 stvcli.py 创建 PEX 文件的尝试如下:
pex -e stvcli:stvcli -r requirements.txt -o stvcli.pex
但是在启动时它只给我一个 ModuleNotFoundError: No module named 'stvcli', 当 stvcli 明确存在时!
如何将我的 Python 文件作为我的入口点? 有问题,我会第一时间为您解答!
我找到了问题的答案!
要在 pex 文件上设置 .py 文件的入口点,请使用 -c 命令!
e.g. pex . -r requirements.txt -c main.py -o test.pex
官方文档真的很复杂很笨重!
这里有一篇博客,非常详细地描述了成功创建 pex 文件所需的步骤!
https://www.shearn89.com/2021/04/15/pex-file-creation
这对我帮助很大,希望对你也有帮助!