0

我在尝试运行 python 脚本时遇到了一个问题,为了简单起见,我们称之为它my_tokenizer.py,它的内容只是导入拥抱脸的变形金刚。不幸的是,尝试从工作目录运行它会导致 ImportError ,这似乎是由于工作目录中的文件名引起的,并且与transformer包在其内部某处使用的文件具有相同的名称。

在工作目录中有 2 个文件:

  • /project/my_tokenizer.py(仅包含导入“导入变压器”的行)
  • /project/tokenizers.py(空的文件)

并运行python my_tokenizer.py导致以下 ImportError:

Traceback (most recent call last):
  File "project/my_tokenizer.py", line 1, in <module>
    import transformers
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/__init__.py", line 54, in <module>
    from .data import (
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/data/__init__.py", line 6, in <module>
    from .processors import (
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/data/processors/__init__.py", line 5, in <module>
    from .glue import glue_convert_examples_to_features, glue_output_modes, glue_processors, glue_tasks_num_labels
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/data/processors/glue.py", line 24, in <module>
    from ...tokenization_utils import PreTrainedTokenizer
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/tokenization_utils.py", line 26, in <module>
    from .tokenization_utils_base import (
  File "/Users/radoslawslowinski/opt/anaconda3/envs/aa_ee/lib/python3.8/site-packages/transformers/tokenization_utils_base.py", line 31, in <module>
    from tokenizers import AddedToken
ImportError: cannot import name 'AddedToken' from 'tokenizers' (/Users/radoslawslowinski/project/tokenizers.py)

虽然我可以将我的文件重命名project/tokenizers.py为其他名称,但我想知道它为什么会发生。

4

2 回答 2

1

我想我已经了解导致问题的原因 - 它是在包中使用相同名称的文件transformer(在内部导入另一个名为 的包tokenizers)与我的本地文件tokenizers.py.

之所以如此,是因为我的工作目录首先位于将被搜索以查找导入的路径列表中。可以通过以下方式检查:

import sys
print(sys.path)
from transformers import BasicTokenizer

为了证明从调用脚本的目录开始搜索导入,您可以将第一个 sys.path 移动到列表的末尾,以下代码将起作用:

import sys
sys.path = sys.path[1:] + sys.path[:1]
import transformers
于 2021-01-19T08:00:11.710 回答
-1

我认为你有类 AdditionalToken 或函数 AdditionalToken。如果你正在导入它,那么解释器没有得到要导入的内容,因为有 2 个文件作为名称转换器,所以如果本身没有 AdditionalToken 它会自行导入它会导致错误或变形金刚没有添加令牌。
谢谢你
有一个美好的一天
-杠杆

于 2021-02-26T03:52:07.507 回答