Answers:
socket
是一个包含class的模块socket
。
您需要执行socket.socket(...)
以下操作from socket import socket
:
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
这就是错误消息的含义:
它表示为module object is not callable
,因为您的代码正在调用模块对象。模块对象是导入模块时得到的东西的类型。您试图做的是在模块对象中调用恰好与包含它的模块同名的类对象。
这是一种从逻辑上分解这种错误的方法:
module object is not callable
。Python告诉我我的代码试图调用无法调用的内容。我的代码试图调用什么?”socket
。那应该是可以调用的!变量socket
是我认为的吗?”print socket
print socket
您会看到名称socket
是一个模块。它必须已绑定到该模块的某个地方!仔细阅读您的代码,我确定您会import socket
在不期望的地方看到一个或多个。
socket.socket
有点混乱。我只是简单地做了import write_to_file
,然后,因为我在其中使用的方法被write_to_file.py
命名为writeToTextFile
I randwrite_to_file.writeToTextFile
假设YourClass.py的内容是:
class YourClass:
# ......
如果您使用:
from YourClassParentDir import YourClass # means YourClass.py
这样,我得到TypeError:如果您随后尝试使用'module'对象,则该对象不可调用YourClass()
。
但是,如果您使用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
或使用YourClass.YourClass()
,它对我有用。
添加到__init__.py
YourClassParentDir中的主目录,例如:
from .YourClass import YourClass
然后,将类导入另一个脚本时,您将准备好该类的实例:
from YourClassParentDir import YourClass
from .YourClass import YourClass
在__init__.py
文件中吗?
这是另一个陷阱,即使阅读了这些帖子,我也花了一段时间。我正在设置一个脚本来调用我的python bin脚本。我也无法调用该模块。
我的字形是我正在执行以下操作:
from mypackage.bin import myscript
...
myscript(...)
当我的Zag需要执行以下操作时:
from mypackage.bin.myscript import myscript
...
myscript(...)
总之,请仔细检查您的程序包和模块嵌套。
我正在尝试做的是拥有一个没有* .py扩展名的脚本目录,并且仍然将“ bin”模块放入mypackage / bin中,而这些扩展名具有我的* .py扩展名。我是包装的新手,在解释标准时要遵循这些标准。所以,我在安装根目录下:
setup.py
scripts/
script1
mypackage/
bin/
script1.py
subpackage1/
subpackage_etc/
如果这不符合标准,请告诉我。
看来您完成的操作是将socket
模块导入为import socket
。因此socket
是模块。您或者需要将该行更改为self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
,以及将该socket
模块的所有其他用法更改为1,或者将import语句更改为from socket import socket
。
或者你有一个import socket
你的后from socket import *
:
>>> from socket import *
>>> serv = socket(AF_INET,SOCK_STREAM)
>>> import socket
>>> serv = socket(AF_INET,SOCK_STREAM)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'module' object is not callable
import socket
,它将导入socket
覆盖该类的模块socket
。请参阅编辑中的代码段。
from <...> import *
导入不良,不良,不良的原因或多或少是这样的:通常,您确切地知道全局名称空间中的内容,因为它正是您所放置的内容。但是,当您使用时import *
,您会使用其他模块定义的各种内容填充该名称空间。在这种情况下,不清楚名称的socket
来源-是模块还是该模块中定义的内容?如果您始终使用import socket
或from socket import socket
,则永远不会出现此问题,因为您可以确切地看到正在使用的名称。
我知道这个线程已经使用了一年,但是真正的问题出在您的工作目录中。
我相信工作目录是C:\Users\Administrator\Documents\Mibot\oops\
。请检查socket.py
在此目录中命名的文件。找到它后,对其进行重命名或移动。导入套接字时,socket.py
将使用当前目录中的内容,而不是使用socket.py
Python目录中的内容。希望这会有所帮助。:)
注意:切勿使用Python目录中的文件名来保存程序的文件名。它将与您的程序冲突。
socket.py
。好吧,这引起了完全相同的错误消息。此页面使我走上了正确的轨道:python-notes.curiousefficiency.org/en/latest/python_concepts/…–
在setup.py中配置console_scripts入口点时,我发现当端点是模块或程序包而不是模块中的函数时,存在此问题。
Traceback (most recent call last):
File "/Users/ubuntu/.virtualenvs/virtualenv/bin/mycli", line 11, in <module>
load_entry_point('my-package', 'console_scripts', 'mycli')()
TypeError: 'module' object is not callable
例如
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule]
},
# ...
)
本来应该
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule:main]
},
# ...
)
这样它将引用可调用函数,而不是模块本身。如果模块具有if __name__ == '__main__':
块,这似乎没有什么区别。这将不会使该模块可调用。
由于模块不可调用,请检查导入语句。在Python中,所有东西(包括函数,方法,模块,类等)都是一个对象。
解决此问题的一种简单方法是导出PYTHONPATH
变量环境。例如,对于Debian / GNU Linux中的Python 2.6:
export PYTHONPATH=/usr/lib/python2.6`
在其他操作系统中,您首先要找到该模块或socket.py
文件的位置。