2

在我的项目中,我想更改主包名称。

我有一个这样的目录结构:

hallo/sub
hallo/foo
hallo/bar

我想将主名称更改为“再见”:

goodbye/sub
goodbye/foo
goodbye/bar

但结果新名称总是被拒绝!例如,如果我导入

import goodbye.sub.utils as utils

它返回错误

ImportError: No module named sub.utils

显然旧名称不起作用。该文件__init__.py写入所有子目录!

我试图删除所有 *.pyc 文件和缓存目录,我试图在另一个目录中重新克隆项目,但没有,新名称总是被拒绝!

我在 *nix 下使用 python2,我从来没有在 windows 下移动过。

有什么想法?

编辑:旧名称完美运行:

import hallo.sub.utils as utils

一直工作没有任何错误,问题是名称更改。

4

1 回答 1

0

对于从外部导入的内容,请检查__init__.py可能会引发问题的变量的内容——比如__all__.

此外,典型的成语是:

from hallo.sub import utils      #tyically this
import hallo.sub.utils as utils  #instead of this

我无法想象为什么这会有所作为,但 python 偶尔会有一些愚蠢的错误。

对于包内的导入,您可以改用相对导入。在您的hallo包裹中,您可以更改:

import hallo.sub as sub
import hallo.sub.utils as utils

对此

from . import sub
from .sub import utils

那么外包装叫什么就无所谓了。

于 2012-10-17T09:30:27.100 回答