Python 在PEX文件上创建入口点时出现问题

Python 在PEX文件上创建入口点时出现问题,python,twitter,pex,Python,Twitter,Pex,我目前正在尝试创建一个带有Pythonfile入口点的pex文件 我的文件夹结构如下所示: ├── readme.md ├── requirements.txt ├── setup.py ├── stv │   ├── adminuser.py │   ├── __init__.py │   ├── __pycache__ │   │   ├── adminuser.cpython-39.pyc │   │   ├── __init__.cpython-39.pyc │   │   ├── se

我目前正在尝试创建一个带有Pythonfile入口点的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 -e stvcli:stvcli -r requirements.txt -o stvcli.pex
所以我试着制作一个包含所有文件的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文件的尝试如下:

├── 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 -e stvcli:stvcli -r requirements.txt -o stvcli.pex
但在启动时,它只会给我一个ModuleNotFoundError:没有名为“stvcli”的模块, 当stvcli明显存在时

如何将Python文件作为入口点?
如果你有任何问题,我会立即回答

我找到了问题的答案

要在pex文件上设置.py文件的入口点,请使用-c命令

例如pex-r requirements.txt-c main.py-o test.pex

官方文件真的很复杂和笨重

这里有一个博客,详细介绍了成功创建pex文件所需的步骤

这对我帮助很大,我希望这对你也有帮助