我正在编写一个Python包,但由于命名冲突的问题,标准库被导入而不是我的文件。
例如,以下是一个文件结构:
当我运行这个时,会得到以下结果:
请注意,当我运行 ./package/module.py 时,./package/signal.py 中的打印语句没有被触发。这意味着加载的信号是来自标准库的信号。
例如,以下是一个文件结构:
package/__init__.py
# No data in this file
package/module.py
#!/usr/bin/env python
print 'Loading module.py'
import signal
package/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
引用了标准库版本。我如何强制 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 中的打印语句没有被触发。这意味着加载的信号是来自标准库的信号。
$ python2 -m package.module
=>加载 module.py 加载 signal.py
- Felix Yan-m
仅在 Python2.6+ 上正常工作。http://docs.python.org/whatsnew/2.6.html#pep-366-explicit-relative-imports-from-a-main-module - jfs