首页 > 解决方案 > 尝试在没有说明的情况下从 repo 运行 python 代码

问题描述

我试图从这个 repo运行代码但没有成功。没有关于如何运行它的说明。我怀疑我应该运行FactcheckingRANLP/Factchecking_clean/classification/lstm_train.py然后运行.../lstm_test.py

问题是这段代码使用import语句作为模块,引用不同目录中的文件夹和文件,例如lstm_train.py

File "lstm_train.py", line 3, in <module>
    from classification.lstm_utils import *
ModuleNotFoundError: No module named 'classification'

这是分类文件夹的树形结构:

.
├── classification
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── lstm_repres.py
│   ├── lstm_test.py
│   ├── lstm_train.py
│   ├── lstm_train.pyc
│   ├── lstm_utils.py
│   ├── lstm_utils.pyc
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── lstm_train.cpython-36.pyc
│   │   └── lstm_utils.cpython-36.pyc
│   └── svm_run.py

我想知道如何让 python 运行 lsmt_train/test.py 文件,以便正确编译其中包含的导入语句。我不想修改代码,因为这可能会产生很多错误..

标签: python

解决方案


您可以将指向分类文件夹的路径添加到您的 python 路径变量中。

我建议使用 sys 包:

import sys

sys.path.append('<<<PathToRepo>>>/FactcheckingRANLP/Factchecking_clean')

将 repo 分类目录添加到您的 python 路径后,导入语句应该可以工作。

编辑:更正;在最初的帖子中,我建议将 .../classification 的路径添加到您的路径变量中,而不是父文件夹 .../Factchecking_clean 是必需的,因为文件导入了模块“分类”。

此外,在 Lucas Azevedo 的回答中,父目录路径被添加到存储库 lstm_train 文件本身中。虽然这绝对有效,但我仍然认为不编辑原始存储库应该是可能的。

我查看了有问题的 repo,像 lstm_train.py 这样的文件是脚本,应该在 python 工作目录设置为'<<<PathToRepo>>>/FactcheckingRANLP/Factchecking_clean'.

有几种方法可以做到这一点:

  1. 您可以在 python IDE 中打开项目并将执行配置为使用该目录.../Factchecking_clean作为工作目录。例如,在 pycharm 中,这可以通过将 repo 目录.../Factchecking_clean作为项目导入来完成。下图展示了如何在 pycharm 中设置执行的工作目录:

在此处输入图像描述

我认为存储库是使用此执行配置设置开发的。

  1. 另一种可能性是从另一个 python 文件中执行 python 脚本。这对我来说似乎相当不方便,不管你可以通过创建一个单独的 python 文件来做到这一点:
import sys
import os

sys.path.append('<<<PathToRepo>>>/FactcheckingRANLP/Factchecking_clean')
os.chdir('<<<PathToRepo>>>/FactcheckingRANLP/Factchecking_clean')
exec(open('./classification/lstm_train.py').read())

这会将Factchecking_clean目录添加到 python 路径(使用sys.path.append()),以便能够导入classification.utils. 工作目录由设置os.chdir()并最终exec(open('<<<filepath>>>')).read()执行具有正确工作目录和路径变量设置的 lstm_train 文件。

使用上面的代码执行新的 python 文件对我有用(无需编辑原始存储库)。

但是,由于像 lstm_train.py 这样的脚本实际上用于执行其余存储库模块中提供的代码的特定部分,我认为出于实验目的编辑这些文件是可以的。一般来说,在使用这样的存储库时,我建议使用具有正确设置配置的 IDE(如 pycharm)(方法 1)。


推荐阅读