我正在尝试跟踪python脚本的执行情况:
python -m trace --count nmt.nmt \
--src=de --tgt=en \
--ckpt=deen_gnmt_model_4_layer/translate.ckpt \
--hparams_path=nmt/standard_hparams/wmt16_gnmt_4_layer.json \
--out_dir=/tmp/deen_gnmt \
--vocab_prefix=/tmp/wmt16/vocab.bpe.32000 \
--inference_input_file=/tmp/wmt16/newstest2015.tok.bpe.32000.de \
--inference_output_file=/tmp/deen_gnmt/output_infer \
--inference_ref_file=/tmp/wmt16/newstest2015.tok.bpe.32000.en
但是,我收到nmt.nmt:无法运行文件'nmt.nmt',因为:[Errno 2]没有这样的文件或目录:'nmt.nmt'错误。当我执行跟踪命令时,它起作用了。有人对我为什么可以使用跟踪执行脚本有解决方案吗?
答案 0 :(得分:0)
您的原始命令使用了python -m nmt.nmt ...
,它告诉Python找到nmt.nmt
模块并将其作为主脚本运行。
您的trace
命令使用python -m trace ...
,告诉Python运行trace
模块作为主要脚本,并告诉trace
运行文件当前目录中名为nmt.nmt
的em>作为主脚本。没有这样的文件; nmt.nmt
模块对应于nmt.py
某个位置的nmt
目录中的sys.path
文件,而不是nmt.nmt
文件。
trace
模块没有提供自己的python -m
等效项;您不能告诉trace
模块将另一个模块作为主要脚本运行并对其进行跟踪。一种解决方法是创建一个复制python -m
的效果并进行跟踪的文件。我尚未对此进行测试:
# workaround.py
import runpy
runpy.run_module('nmt.nmt', run_name='__main__', alter_sys=True)
这将被追踪为python -m trace --count workaround.py ...
答案 1 :(得分:0)
通过运行以下一项或多项内容找出正在运行的程序包或模块的完整路径;
python -vm nmt.nmt |& grep nmt
或
输出应类似于;
import nmt # directory /home/user/src/nmt
import nmt # precompiled from /home/user/nmt/__init__.pyc
import nmt.nmt # directory /home/user/nmt/nmt
python -c 'import nmt.nmt;print(nmt.nmt.__file__)'
输出应该是您可以通过python -m trace --trace /home/user/nmt/nmt.py
python -c 'import nmt.nmt;print(nmt.nmt.__path__)'
输出应该是您可以跟踪的目录的绝对路径
python -m trace --trace /home/user/nmt/nmt/__main__.py
因为带有__init__.py
的目录可以由python -m
运行,如果它们包含__main__.py
。