win - python 3 mechanize
No se puede importar un módulo de Python que esté definitivamente instalado(mecanizar) (14)
Cuando instalas a través de easy_install
o pip
, ¿se está completando con éxito? ¿Cuál es la salida completa? ¿Qué instalación de python estás usando? Es posible que necesite usar sudo
antes de su comando de instalación, si está instalando módulos en un directorio del sistema (si está utilizando la instalación del sistema python, quizás). No hay mucha información útil en su pregunta para evitarla, pero algunas herramientas que probablemente lo ayuden incluyen:
echo $PYTHONPATH
y / oecho $PATH
: al importar módulos, Python busca una de estas variables de entorno (listas de directorios,: delimitadas) para el módulo que desea. Los problemas de importación a menudo se deben a que el directorio correcto no figura en estas listaswhich python
,which pip
, owhich easy_install
: estos le dirán la ubicación de cada ejecutable. Puede ser útil saberUse virtualenv , como sugiere @JesseBriggs. Funciona muy bien con
pip
para ayudarlo a aislar y administrar los módulos y el entorno para proyectos de Python por separado.
Problemas continuos con la instalación de Python (2.7.3) en mi máquina Ubuntu 12.04 e importación de módulos.
Aquí estoy teniendo un problema donde definitivamente he instalado mecanizar tanto en mi máquina como en diversos entornos virtuales.
He intentado instalar desde pip, easy_install y mediante python setup.py install
de python setup.py install
desde este repositorio: https://github.com/abielr/mechanize .
Todo esto fue en vano, ya que cada vez que entro en mi interactivo python obtengo:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>
Otras computadoras en las que instalo esto no tienen ningún problema (una Mac o una máquina con Windows en funcionamiento, por ejemplo, todo está bien, se instala e importa como siempre).
Me está volviendo loco en este punto, y solo quiero hacer un poco de trabajo.
INFORMACIÓN ACTUALIZADA (en respuesta a los comentarios) :
Salida de easy_install mechanize
y rutas:
<me>@<host>:~$ sudo easy_install mechanize
[sudo] password for <me>:
Processing mechanize
Writing /home/<me>/mechanize/setup.cfg
Running setup.py -q bdist_egg --dist-dir /home/<me>/mechanize/egg-dist-tmp-zXwJ_d
warning: no files found matching ''*.html'' under directory ''docs''
warning: no files found matching ''*.css'' under directory ''docs''
warning: no files found matching ''*.js'' under directory ''docs''
mechanize 0.2.6.dev-20130112 is already the active version in easy-install.pth
Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
Processing dependencies for mechanize==0.2.6.dev-20130112
Finished processing dependencies for mechanize==0.2.6.dev-20130112
<me>@<host>:~$ ^C
<me>@<host>:~$ which pip
/home/<me>/bin/pip
<me>@<host>:~$ which python
/home/<me>/bin/python
<me>@<host>:~$ which easy_install
/home/<me>/bin/easy_install
<me>@<host>:~$
SEGUNDA ACTUALIZACIÓN: Parece ser algo con mecanizar, como si agregara cualquier otro paquete al azar a través de pip, no hay ningún problema (en este caso html5lib
)
TERCERA ACTUALIZACIÓN (@DSM)
1)
>>> sys.path
['''', ''/home/<me>/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg'', ''/home/<me>/local/lib/python2.7/site-packages/virtualenvwrapper-2.11-py2.7.egg'', ''/home/<me>/src/geopy'', ''/home/<me>/local/lib/python2.7/site-packages/BeautifulSoup-3.2.0-py2.7.egg'', ''/home/<me>/local/lib/python2.7/site-packages/django_sorting-0.1-py2.7.egg'' ... <so on and so forth but mechanize is not here>]
>>>
2) *pretty long output of which most looks like:*
<me>@<host>:~$ ls -laR /usr/local/lib/python2.7/dist-packages/mech*
/usr/local/lib/python2.7/dist-packages/mechanize:
total 1144
...lots of other files, pretty much same permissions...
-rw-r--r-- 1 root staff 24916 Jan 11 01:19 _mechanize.py
...lots of other files...
3)
>>> import imp
>>> imp.find_module("mechanize")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>
CUARTO EDITAR (esto es ridículo: /): Esto es similar a un problema que tuve antes ( eliminación completa e instalación reciente de python en Ubuntu 12.04 ), donde si ejecuto todo con sudo, está bien, pero no lo hago Sé que debería hacer eso ... ¿Qué pasa con los permisos?
El mecanismo de importación de Python funciona realmente, entonces, ya sea:
- Tu PYTHONPATH está mal,
- Tu biblioteca no está instalada donde crees que es
- Tienes otra biblioteca con el mismo nombre enmascarando este
En mi caso, había ejecutado pip install Django==1.11
y no importaría desde el intérprete de python
.
Al navegar a través de los comandos de pip show
encontré un pip show
que se veía así:
> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...
Observe que la ubicación dice ''3.4''. Descubrí que el comando python
estaba vinculado a python2.7
/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7
Justo al lado de eso encontré un enlace llamado python3
así que lo usé. También puede cambiar el enlace a python3.4
. Eso lo arreglaría, también.
Es el problema del camino de python.
En mi caso, tengo Python instalado en:
/Library/Frameworks/Python.framework/Versions/2.6/bin/python,
y no hay directorio de paquetes de sitio dentro de python2.6.
El paquete (SOAPpy) que instalé en pip está ubicado
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
Y el paquete de sitio no está en la ruta de Python, todo lo que hice fue agregar paquetes de sitio a PYTHONPATH permanentemente.
- Abra la Terminal
- Escriba abrir .bash_profile
En el archivo de texto que aparece, agregue esta línea al final:
export PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
- Guarde el archivo, reinicie la Terminal y listo
He estado golpeando mi cabeza contra mi monitor hasta que un joven interno me dijo que el secreto es "instalar python setup.py" dentro del directorio del módulo.
Por alguna razón, ejecutar la configuración desde allí lo hace funcionar.
Para que quede claro, si el nombre de su módulo es "foo":
[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root 118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root 93 Jun 21 15:23 foo
-rw-r--r-- 1 root root 416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->
Si intentas ejecutar setup.py desde cualquier otro directorio llamando su ruta, terminas con una instalación borked.
NO FUNCIONA:
python /root/foo/setup.py install
FUNCIONA:
cd /root/foo
python setup.py install
No pude hacer que mi PYTHONPATH funcionara correctamente. Me di cuenta que agregar export
solucionó el problema:
(funcionó)
export PYTHONPATH=$PYTHONPATH:~/test/site-packages
vs.
(no funcionó)
PYTHONPATH=$PYTHONPATH:~/test/site-packages
Pude corregir este problema con un enfoque combinado. Primero, seguí el consejo de Chris, abrí una línea de comando y escribí ''nombre del paquete de show de pip''. Esto proporcionó la ubicación del paquete instalado.
A continuación, abrí python y escribí ''import sys'', luego ''sys.path'' para mostrar dónde mi python busca los paquetes que importo. Por desgracia, la ubicación que se muestra en el primer paso NO estaba en la lista.
Paso final, escribí ''sys.path.append ('' package_location_seen_in_step_1 ''). Opcionalmente puede repetir el paso dos para ver que la ubicación ahora está en la lista.
Paso de prueba, intenta importar el paquete nuevamente ... funciona.
¿La baja? Es temporal, y necesita agregarlo a la lista cada vez.
Si aprende a usar virtualenv (que es bastante simple), tendrá menos de estos problemas. Solo obtendrá el virtualenv y luego usará paquetes locales (para el proyecto).
Me soluciona muchos dolores de cabeza con rutas, versiones, etc.
Tenía este problema exacto, pero ninguna de las respuestas anteriores funcionó. Me volvía loco hasta que noté que sys.path era diferente después de importar desde el proyecto principal. Resultó que había usado importlib para escribir una pequeña función para importar un archivo que no estaba en la jerarquía del proyecto. Mala idea: olvidé que había hecho esto. Peor aún, el proceso de importación se arruinó con sys.path, y lo dejó así. Muy mala idea
La solución fue detener eso y simplemente colocar el archivo que necesitaba para importar al proyecto. Otro enfoque habría sido poner el archivo en su propio proyecto, ya que debe reconstruirse de vez en cuando, y la reconstrucción puede coincidir o no con la reconstrucción del proyecto principal.
Tuve el mismo problema: el script con import colorama
estaba lanzando e ImportError, pero sudo pip install colorama
me decía "paquete ya instalado".
Mi solución: ejecutar pip sin sudo : pip install colorama
. Luego, pip acordó que necesitaba ser instalado, lo instaló y mi script se ejecutó.
Mi entorno es Ubuntu 14.04 de 32 bits; Creo que vi esto antes y después de activar mi virtualenv.
ACTUALIZACIÓN : aún mejor, utilice python -m pip install <package>
. El beneficio de esto es que, dado que está ejecutando la versión específica de python en la que desea que esté el paquete, pip instalará inequívocamente el paquete en el python "correcto". De nuevo, no use sudo en este caso ... luego obtendrá el paquete en el lugar correcto, pero posiblemente con permisos de raíz (no deseados).
Tuve este problema con 2.7 y 3.5 instalados en mi sistema tratando de probar un bot de telegrama con Python-Telegram-Bot .
No pude hacer que funcionara después de instalar con pip y pip3, con sudo o sin él. Siempre tengo:
Traceback (most recent call last):
File "telegram.py", line 2, in <module>
from telegram.ext import Updater
File "$USER/telegram.py", line 2, in <module>
from telegram.ext import Updater
ImportError: No module named ''telegram.ext''; ''telegram'' is not a package
Leer correctamente el mensaje de error me dice que python está buscando en el directorio actual un telegram.py
. Y a la derecha, tenía una secuencia de comandos allí llamada telegram.py y esto fue cargado por Python cuando llamé a la import
.
Conclusión, asegúrese de no tener ningún package.py
en su directorio de trabajo actual cuando intente importar. (Y lea el mensaje de error a fondo).
Tuve un problema similar (en Windows) y la causa raíz en mi caso fue el software ANTIVIRUS . Tiene la característica de "autocontención", que envuelve el proceso en ejecución con algún tipo de máquina virtual. Los síntomas son: pip install somemodule
funciona bien en una ventana de línea de cmd e import somemodule
falla cuando se ejecuta desde otro proceso con el error
ModuleNotFoundError: No module named ''somemodule''
Espero que ahorre algo de tiempo a alguien :)
en mi caso es un problema de permiso. El paquete se instaló de alguna manera con el permiso root rw solamente, ¡otro usuario simplemente no puede ejecutarlo!
python -m pip install
- me ayudó a resolver este problema. Empecé a enfrentar este problema después de actualizar el python to 2.7.14
(desde 12
)