【发布时间】:2012-02-06 11:08:22
【问题描述】:
执行 python 协议/smpp/test/test_post_upgrade.py 时出现以下错误:
Traceback (most recent call last):
File "protocols/smpp/test/test_post_upgrade.py", line 1, in <module>
from protocols.smpp.proto import *
File "/tmp/Wass/protocols/smpp/proto.py", line 1, in <module>
from twisted.internet import defer, reactor
ImportError: No module named internet
这是我的树:
/tmp/Wass$ tree
.
├── __init__.py
└── protocols
├── __init__.py
├── __init__.pyc
└── smpp
├── __init__.py
├── __init__.pyc
├── proto.py
├── proto.pyc
└── test
├── __init__.py
└── test_post_upgrade.py
3 directories, 10 files
这是主要文件的内容:
/tmp/Wass$ cat protocols/smpp/proto.py
from twisted.internet import defer, reactor
/tmp/Wass$ cat protocols/smpp/test/test_post_upgrade.py
from protocols.smpp.proto import *
/tmp/Wass$ cat protocols/smpp/__init__.py
__import__('pkg_resources').declare_namespace(__name__)
有关信息,我可以通过以下操作之一解决此问题:
- 清空
protocols/smpp/__init__.py,但这对整个项目很有用,所以我可以清空这个文件,我的项目将不再运行.. - 将
protocols/smpp重命名为其他任何名称,例如protocols/toto将起作用(将protocols/smpp/test/test_post_upgrade.py更改为from protocols.toto.proto import *
第二种解决方案非常混乱,因为我的系统中没有任何可能导致冲突的smpp/proto.py ...
以下是该问题的更简单表示:
Wass/
Wass/__init__.py
Wass/protocols/
Wass/protocols/smpp/
Wass/protocols/smpp/__init__.py
Wass/protocols/smpp/test/
Wass/protocols/smpp/test/__init__.py
Wass/protocols/__init__.py
Wass/protocols/smpp/test/test_post_upgrade.py:
> from Wass.protocols.smpp.proto import SMPPClientProtocol
Wass/protocols/smpp/proto.py
> from twisted.internet import defer, reactor
>
> class SMPPClientProtocol:
> pass
执行结果:
$ echo $PYTHONPATH
:/opt/smpp.twisted/:/opt/smpp.pdu/:/tmp/Wass/
python /tmp/Wass/protocols/smpp/test/test_post_upgrade.py
> Returns the same problem above
【问题讨论】:
-
“python -c 'import twisted; print twisted.__file__'”的输出是什么?
标签: python namespaces package twisted