socket getsockname español create python sockets

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 variable socket es lo que creo que es?`
  • print socket