【发布时间】:2021-12-25 03:49:40
【问题描述】:
在我当前的工作目录中有一个子目录cpuimlearn,结构如下:
$ tree cpuimlearn
cpuimlearn
├── AdaBoostM1.py
├── DECOC.py
├── DOAO.py
├── factory.py
├── FocalBoost.py
├── ImECOC.py
├── __init__.py
└── SAMME.py
0 directories, 8 files
文件factory.py 实现了一个类FAC,这样:
class FAC:
def __init__(self):
pass
...
所以所有其他文件都导入这个类。例如,AdaBoostM1.py 像这样导入类:
File: AdaBoostM1.py
from factory import FAC
fac = FAC()
....
但奇怪的是,这些文件无法导入该类。例如:
$ python
Python 3.8.3 (default, Jul 2 2020, 16:21:59)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> from cpuimlearn import AdaBoostM1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "~/gpuimlearn/src/CPU-imLearn/cpuimlearn/AdaBoostM1.py", line 21, in <module>
from factory import FAC
ModuleNotFoundError: No module named 'factory'
>>>
从创建的新__pycache__ 目录可以看出,如果模块成功导入,factory.cpython-38.pyc 不会像我们预期的那样创建。
这很奇怪,因为factory.py 在目录中可用,并且它实现了FAC 类。
$ tree cpuimlearn
cpuimlearn
├── AdaBoostM1.py
├── DECOC.py
├── DOAO.py
├── factory.py
├── FocalBoost.py
├── ImECOC.py
├── __init__.py
├── __pycache__
│ ├── AdaBoostM1.cpython-38.pyc
│ └── __init__.cpython-38.pyc
└── SAMME.py
1 directory, 10 files
【问题讨论】:
-
factory.py在您执行from cpuimlearn import AdaBoostM1时不在当前工作目录中。看起来 cwd 是~/gpuimlearn/src/CPU-imLearn。
标签: python python-3.x python-import python-packaging