我在执行python protocols/smpp/test/test_post时遇到以下错误_升级.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
这是我的树:
^{pr2}$以下是主要文件的内容:
/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
这里有许多潜在的问题。在
Wass
真的应该是一个包,还是它是sys.path
上的一个条目?如果它真的是一个包,那么您应该将/tmp
添加到PYTHONPATH
;如果它是一个路径条目,则应该向PYTHONPATH
添加{python
。它混淆了这个问题。在Wass
将继续是一个包(即包含一个__init__.py
),则应将导入调整为from Wass.protocols.smpp.proto import ...
。在import *
。这只是令人困惑;读代码的人根本不知道什么名字应该来自哪个模块。在最终,我认为您所看到的问题是由一个名为}或{}拉入该名称空间并与某些东西发生冲突,然后名称空间包与它们结合在一起形成了一个爆炸。如果没有看到触发问题的实际代码,我再具体不过了。在
protocols
的顶层模块的组合引起的,它与Twisted中的几个模块冲突,以及使用import *
这可能是将另一个名称,如basic
或{但是,每当遇到这样的问题时,最好后退一步,确保工作目录、脚本目录和PYTHONPATH都是分开的,这样您就可以确切地知道代码是如何导入的。具体地说,我建议您这样做:
希望这样对你更好。在
相关问题 更多 >
编程相关推荐