我有一个正在编写的 python 包,但由于名称冲突,我遇到了一个问题,即导入标准库而不是我的文件。
例如,如下所示的文件结构:
package/__init__.py
# No data in this file
包/模块.py
#!/usr/bin/env python
print 'Loading module.py'
import signal
包/信号.py
#!/usr/bin/env python
print 'Loading signal.py'
当我运行它时,我得到以下结果:
$ ./module.py
Loading module.py
我想得到:
$ ./module.py
Loading module.py
Loading signal.py
实际问题:
因此,当我运行module.py时,它import signal
会转到 stdlib 版本。我怎样才能强制module.py导入 signal.py 呢?
如标签中所述,这需要能够在 python-2.4.3 上运行。虽然这是一个旧版本,但它包含在 RHEL 5 中。
一些附加信息
只是为了获得更多信息,我明确地有以下设置:
[10:30pm][~/test] tree .
.
|-- package
| |-- __init__.py
| |-- module.py
| `-- signal.py
`-- script
[10:30pm][~/test] cat script
#!/usr/bin/env python
from package import signal
[10:30pm][~/test] cat package/__init__.py
[10:30pm][~/test] cat package/module.py
#!/usr/bin/env python
print "Loading module.py"
import signal
[10:30pm][~/test] cat package/signal.py
#!/usr/bin/env python
print "Loading signal.py"
[10:30pm][~/test] python ./script
Loading signal.py
[10:32pm][~/test] python ./package/module.py
Loading module.py
[10:32pm][~/test] python -m package.module
python: module package.module not found
请注意,当我运行./package/module.py时,./package/ signal.py中的打印语句没有被触发。这意味着加载的信号是来自标准库的信号。