我需要一些帮助来找出导入错误。
这是我的python项目的目录结构。
├── files
│ ├── dictionary_files
│ │
│ └── transcripts
├── src
│ ├── package1
│ │ ├── adapt_dictionary.py
│ │ ├── adapt_dictionary.pyc
│ │ └── __init__.py
│ ├── package2
│ └── subtitle.py
└── test
├── logs
│ └── error_log_dict.txt
├── test1.py
└── test2.py
这就是问题所在。文件test1.py
是我为adapt_dictionary.py
编写的测试套件。在adapt_dictionary.py
我有一个名为D_bot
的课程。
class D_bot:
def __init__(self):
我尝试将此类导入我的test1.py
文件。
import sys
import import sys
sys.path.append("/home/andy/Documents/Projects/AI_Subs/src/package1")
from adapt_dictionary import D_Bot
控制台产生cannot import name D_Bot
。不知道发生了什么。我尝试了一些事情。
PYTHONPATH
更改为指向类所在的相应目录sys.path
我的python路径在我的.bashrc
文件中给出如下。
export PYTHONPATH=${PYTHONPATH}:/home/andy/Documents/Projects/AI_Subs/src/package1
仍然没有运气。我正在运行python 2.7.6并且我没有想法。
答案 0 :(得分:1)
首先,你写的sys.path.append
行是错误的。如果要导入包中的文件,则应添加包含包的目录,然后从包中导入该文件:
import sys
sys.path.append("/home/andy/Documents/Projects/AI_Subs/src")
from package1.adapt_dictionary import D_Bot
您可能会添加src/package1
并使用import adapt_dictionary
等同于上述内容:它不是!
adapt_dictionary
中有不同的PYTHONPATH
个文件,则可能会导入这些文件而不是包中的文件pickle
模块,则必须在导入中保持一致,否则代码中断) 此外,您正在尝试修复错误的错误。解释器执行导入adapt_dictionary
模块,但找不到D_bot
类。参见:
$mkdir package1
$touch package1/__init__.py
$echo 'class X: pass' > package1/a.py
$echo 'from package1.a import X
> from package1.a import Y' > test1.py
$python test1.py
Traceback (most recent call last):
File "test1.py", line 2, in <module>
from package1.a import Y
ImportError: cannot import name Y
$echo 'from package1.b import X' > test2.py
$python test2.py
Traceback (most recent call last):
File "test2.py", line 1, in <module>
from package1.b import X
ImportError: No module named b
请注意您的错误类似于第一个错误而不是第二个错误?
第一个发生是因为a.py
存在但不包含Y
类。
您可能在某处有一个adapt_dictionary.py
模块,而解释器正在导入该模块,或者可能有一些过时的.pyc
。
此外,adapt_dictionary
是模块的实际名称吗?我曾经多次看到人们在使用与内置文件相同的名称调用实际文件时发布带有组成名称的代码,在这种情况下,import
更喜欢内置文件与您的内置文件
尝试做:
import sys
sys.path.append("/home/andy/Documents/Projects/AI_Subs/src/package1")
import adapt_dictionary
print(adapt_dictionary.__file__)
检查导入的模块。