getsockname - socket python 3
TypeError: el objeto ''módulo'' no se puede llamar (9)
Añadir a __init__.py
, por ejemplo:
from YourClass import YourClass
Luego, tendrá una instancia de su clase lista cuando la importe a otro script:
from YourClassParentDir import YourClass
File "C:/Users/Administrator/Documents/Mibot/oops/blinkserv.py", line 82, in __init__
self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: ''module'' object is not callable
¿Por qué estoy recibiendo este error? Estoy confundido.
¿Qué necesitas saber para responder mi pregunta?
Al configurar un entrypoint de console_scripts en setup.py, encontré que este problema existía cuando el punto final era un módulo o paquete en lugar de una función dentro del módulo.
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
Por ejemplo
from setuptools import setup
setup (
# ...
entry_points = {
''console_scripts'': [mycli=package.module.submodule]
},
# ...
)
Debería haber sido
from setuptools import setup
setup (
# ...
entry_points = {
''console_scripts'': [mycli=package.module.submodule:main]
},
# ...
)
De modo que se refiera a una función que se puede llamar en lugar del módulo en sí. Parece que no hay diferencia si el módulo tiene un bloque if __name__ == ''__main__'':
. Esto no hará que el módulo sea llamable.
Aquí hay otro gotcha, que me tomó un tiempo ver incluso después de leer estas publicaciones. Estaba configurando un script para llamar a mis scripts de python bin. Estaba consiguiendo que el módulo no se pudiera llamar también.
Mi zig era que estaba haciendo lo siguiente:
from mypackage.bin import myscript
...
myscript(...)
cuando mi zag necesitaba hacer lo siguiente:
from mypackage.bin.myscript import myscript
...
myscript(...)
En resumen, revise nuevamente su paquete y módulo de anidamiento.
Lo que estoy tratando de hacer es tener un directorio de scripts que no tenga la extensión * .py, y aún tenga los módulos ''bin'' en mypackage / bin y estos tienen mi extensión * .py. Soy nuevo en el empaque y trato de seguir los estándares mientras los interpreto. Por lo tanto, tengo en la raíz de configuración:
setup.py
scripts/
script1
mypackage/
bin/
script1.py
subpackage1/
subpackage_etc/
Si esto no cumple con el estándar, hágamelo saber.
Parece que lo que has hecho es importar el módulo de socket
como import socket
. Por eso el socket
es el módulo. self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cambiar esa línea a self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, así como cualquier otro uso del módulo socket
, o cambiar la declaración from socket import socket
.
O tienes un import socket
después de tu 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
Sé que este hilo tiene un año de antigüedad, pero el problema real está en su directorio de trabajo.
Creo que el directorio de trabajo es C:/Users/Administrator/Documents/Mibot/oops/
. Verifique el archivo llamado socket.py
en este directorio. Una vez que lo encuentre, renómbrelo o muévalo. Cuando importa socket, se socket.py
desde el directorio actual en lugar de socket.py
desde el directorio de Python. Espero que esto haya ayudado. :)
Nota: Nunca use los nombres de archivo del directorio de Python para guardar el nombre de archivo de su programa; entrará en conflicto con su programa (s).
Supongamos que el contenido de YourClass.py es:
class YourClass:
# ......
Si utiliza:
from YourClassParentDir import YourClass # means YourClass.py
De esta manera, obtuve TypeError: el objeto ''módulo'' no se puede llamar si intentas usar YourClass()
.
Pero, si usas:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
o use YourClass.YourClass()
, funciona para mí.
Supongo que ha anulado la función / variable incorporada u otra "módulo" configurando la variable global "módulo". solo imprime el modulo ver que hay en el.
Una forma sencilla de resolver este problema es exportar el entorno de la variable PYTHONPATH
. Por ejemplo, para Python 2.6 en Debian / GNU Linux:
export PYTHONPATH=/usr/lib/python2.6`
En otros sistemas operativos, primero encontrará la ubicación de este módulo o el archivo socket.py
.
socket
es un módulo, que contiene la clase socket
.
Necesitas hacer socket.socket(...)
o 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''>
Observe que el error aquí es bastante fácil de entender: si el module object is not callable
se puede llamar, probablemente esté llamando a un objeto de módulo. ¿Qué es un objeto de módulo? Es el tipo de cosa que obtienes cuando importas un módulo.
Pero incluso si no entiendes eso (lo cual está bien, a menudo es confuso que las clases, los módulos, las funciones, etc., sean solo objetos como todo lo demás), hay una manera bastante fácil de comenzar a depurar:
- "Hmm, el
module object is not callable
se puede llamar. Eso suena como que estoy tratando de llamar a algo que no puedes llamar. Me pregunto a qué estoy tratando de llamar." - "Oh, estoy llamando a
socket
. ¡Eso debería ser invocable! Me pregunto si la variablesocket
es lo que creo que es?` -
print socket