Me topé con esta situación recientemente, instrucciones de instalaci´ón de cierta utilería1 involucraban el uso de
pip3
y desde ya hace tiempo tenía un problema con ésta. Lo había dejado pasar pues hacía uso de pip
dentro de un ambiente virtual de conda
(hay quien dice que en estas situaciones es mejor instalar y desintalar todo con conda
y ovidarse de pip
pues pueden darse casos de comportamientos anómalos con algunos paquetes, y hay quién dice que no hay problema si uno es constante y ordenado; personalmente mi experiencia va por esta segunda opinión pero reconozco que llegan a verse casos donde las cosas no funcionan como se espera y en gran parte de debe a esto). Lo cierto es que tratándose de conda
y pip
al final cualquier problema puede reducirse a valores de paths. A veces se solucionan con alguna variable de ambiente, pero si hay algo que me gusta de Python
es que no depende tanto de éstas como es el caso de Java
.
En este caso, ciertamente la razón por la que debía hacer uso de pip3
se debía a una utilería que fue instalada en un path aparentemente equivocado. Así, de acuerdo a lo anterior imaginé que la instalación fue hecha con pip
y por ello quería probar si con pip3
habría diferencia en el resultado. Así fue que me topé con el problema que es el caso de este post.
Adicionalmente, está el hecho de que la instalación de Python en Mac tiene sus bemoles, siendo uno de ellos la dependencia que Apple ha hecho de Python 2.7 y así las recomendaciones para no quitarlo.
Bueno, el asunto es que al tratar de ejecutar pip3
, brincaba el siguiente error:
Traceback (most recent call last):
File "/Applications/Xcode.app/Contents/Developer/usr/bin/pip3", line 10, in <module>
sys.exit(main())
TypeError: 'module' object is not callable
«Gugleando» el asunto, en una página web2 encontré algunas instrucciones pero en ella se indica eliminar cierto directorio que al explorarlo constaté cuenta con cosas de Python 2.7 y pensando en lo ya expuesto no me animé a eliminarlo como se sugiere. En Twitter alguien me sugería hacer uso de pip
como módulo de python y no en forma aislada, es decir
$ python3 -m pip ...
en vez de tan sólo y directamente
$ pip ...
pero, ¿no se supone que pip
es referenciado como un comando a ser usado sin necesidad de llamar explícitament al intérprete? Con mayor razón debía llegar al fondo de esto. La búsqueda con términos explícitos con mi caso (pip3 y xcode) no daba frutos, así que cambié por algo más general y enfocado al problema. Fue así llegue a otra página web3 que explicaba el propósito del mensaje de error, y no tanto la causa.
Leyendo y entendiendo lo que el mensaje indicaba, procedí a editar el script con el problema
$ sudo vi /Applications/Xcode.app/Contents/Developer/usr/bin/pip3
para dejarlo así
#!/usr/bin/xcrun python3 # -*- coding: utf-8 -*- import re import sys from pip._internal import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) sys.exit(main.main())
La última línea originalmente era: sys.exit(main())
. Con esto el problema desapareció.
Referencias
- «Installing the AWS CLI version 1«, Amazon, Inc., web. Visited: 2020.04.29. URL: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html.
- Mike Beach, «pip3 crashes on macOS Catalina«, mikebeach.org, blog. Posted: 2020.02.08; visited: 2020.04.29. URL: https://mikebeach.org/2020/02/08/pip3-crashes-on-macos-catalina/.
- İsmail Baydan, «Python “TypeError: ‘module’ object is not callable” Error and Solution«, Poftut, web. 2019.02.19; visited: 2020.04.29. URL: https://www.poftut.com/python-type-error-module-object-is-not-callable-error-and-solution/.