我正在尝试解决一个与在我编写的 Python 脚本中导入模块相关的奇怪问题。实现该模块的文件与主 Python 脚本位于同一目录中。
当我使用 ActivePython 时,Python 脚本运行良好。但是,当我使用嵌入式分发时,出现以下错误。
ModuleNotFoundError: No module named 'pyWhich'
Run Code Online (Sandbox Code Playgroud)
我已经将行为的差异追溯到 sys.path veritable 在 Embedded Distribution 中的设置方式。
在 ActivePython(我的脚本运行的环境)中,sys.path 中的第一个条目是包含脚本的目录。在嵌入式分发中,没有包含脚本的目录条目。
Embedded Distribution 使用 _pth 文件来设置 sys.path。我正在使用默认的 ._pth 文件,为了您的方便,我将其包含在下面。
python36.zip
.
# Uncomment to run site.main() automatically
#import site
Run Code Online (Sandbox Code Playgroud)
我的问题是,我需要在我的 _pth 文件中添加什么神奇的咒语来告诉 Python请将包含我在 sys.path 中运行的任何脚本的目录放入这样我的脚本将与嵌入式分发一起使用。路径配置文件的文档似乎不包含此信息。
我有一套一起开发并捆绑到一个分发包中的软件包。
为了便于讨论,我们假设我有充分的理由按以下方式组织我的 python 发行包:
SpanishInqProject/
|---SpanishInq/
| |- weapons/
| | |- __init__.py
| | |- fear.py
| | |- surprise.py
| |- expectations/
| | |- __init__.py
| | |- noone.py
| |- characters/
| |- __init__.py
| |- biggles.py
| |- cardinal.py
|- tests/
|- setup.py
|- spanish_inq.pth
Run Code Online (Sandbox Code Playgroud)
spanish_inq.pth我已经添加了要添加SpanishInq到 的路径配置文件sys.path,因此我可以直接导入weapons, .etc 。
我希望能够使用 setuptools 构建轮子并在目录中安装 pip install ,但weapons不创建包或命名空间。expectationscharactersSpanishInqSpanishInq
我的设置.py:
from setuptools import setup, …Run Code Online (Sandbox Code Playgroud) 下面是源代码,我用它来加载.pth文件并进行多类图像分类预测。
model = Classifier() # The Model Class.
model.load_state_dict(torch.load('<PTH-FILE-HERE>.pth'))
model = model.to(device)
model.eval()
Run Code Online (Sandbox Code Playgroud)
# prediction function to test images
def predict(img_path):
image = Image.open(img_path)
resize = transforms.Compose(
[ transforms.Resize((256,256)), transforms.ToTensor()])
image = resize(image)
image = image.to(device)
y_result = model(image.unsqueeze(0))
result_idx = y_result.argmax(dim=1)
print(result_idx)
Run Code Online (Sandbox Code Playgroud)
我.pth使用 将该文件转换为 ONNX 文件torch.onnx.export。
现在,如何单独使用 ONNX 文件而不使用该.pth文件来编写与上述类似的预测脚本?可以这样做吗?