with tutorial framework espaƱol djangoproject desde con cero applications python mocking pyunit

python - framework - tutorial django



ImportError: no se pueden importar ajustes de nombre (9)

¡Encontré cosas interesantes! Hay un archivo llamado "functools.py" en la ruta raíz de mi proyecto, y mientras ejecuto mi proyecto, pycharm elevará ImportError. Así que renombro mi archivo solucionando este problema ~~

Estoy usando python 2.7.6 en Ubuntu 14.04.2 LTS. Estoy usando simulacro para simular algunas pruebas de unidad y me doy cuenta de que cuando imito el simulacro, falla la importación de envolturas.

¿No estoy seguro de si hay una versión diferente de una simulacro o seis que debería usar para que funcione la importación? No se pudieron encontrar respuestas relevantes y no estoy usando entornos virtuales.

el módulo simulado dice que es compatible con python 2.7.x: https://pypi.python.org/pypi/mock

simulacro == 1.1.3 seis == 1.9.0

Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from mock import Mock Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/mock/__init__.py", line 2, in <module> import mock.mock as _mock File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 68, in <module> from six import wraps ImportError: cannot import name wraps

También probé con sudo sin suerte.

$ sudo python -c ''from six import wraps'' Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: cannot import name wraps


Aunque no está utilizando un entorno virtual como virtualenv , es ciertamente un gran caso de uso para él. Al utilizar su instalación de Python y todas las dependencias para su proyecto, puede evitar el pirateo de la instalación de Python global / predeterminada, que es de donde proviene gran parte de la complejidad / dificultad.

Esto es lo que utilicé cuando recibí el error de wraps : six==1.10.0 contiene mock==2.0.0 y six==1.10.0 :

cd <my_project> virtualenv venv source venv/bin/activate sudo pip install -r requirements.txt

En mi opinión, no solo es más fácil de usar, sino que también es más sencillo de documentar para las personas que quieran ejecutar su código.


En Mac OSX, la versión de seis instalada anteriormente estaba bloqueando el uso de mi versión actualizada. Verifiqué esto, como se sugirió anteriormente, ejecutando lo siguiente en mi intérprete:

import six six.__version__

Para solucionar esto moví el archivo:

mv/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.py /tmp/old_six.py

Esto ya se indicó en otra respuesta en este sitio, pero quería proporcionar una respuesta más ágil.


Encontré el mismo problema en mi Mac, que pude solucionar al darme cuenta de que el sys.path de mi python contenía ambos

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/

y

/Library/Python/2.7/site-packages/

con lo anterior antes que lo segundo.

Puede probar si esto le está sucediendo ejecutando lo siguiente en la consola de python.

import six six.__version__

mi python estaba cargando un six.py obsoleto del directorio anterior (que no tenía contenedor), a pesar de que pip había instalado una versión más nueva seis en el segundo directorio. (Parece que el marco de mac viene con una versión de seis por defecto).

Pude solucionarlo moviendo six.py y six.pyc fuera del primer directorio (requiere acceso a sudo), para que Python encuentre la versión más nueva de seis en el segundo directorio. Estoy seguro de que también podría cambiar el orden de las rutas en sys.path.

Para encontrar la versión anterior de seis que se debe eliminar, ejecute esto desde la consola de terminal

find /System/Library/Frameworks/Python.framework/Versions -name six.py*


Hice una instalación pip de seis == 1.9.0 y tomó la nueva versión. Parece que mock == 1.3.0 no define correctamente la versión de seis que necesita para obtener compatibilidad con envolturas.


Originalmente tuve un problema con las antiguas versiones "propiedad del sistema operativo" y pip / setuptools. Después de instalar pip manualmente, así:

wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py sudo ln -s /usr/local/bin/pip /usr/bin/pip

Y luego, instalando la última versión de pip , mock y six , aún tenía el problema que describiste anteriormente. Resulta que tuve seis instalados dos veces en:

/usr/lib/python2.7/dist-packages/

y en

/usr/local/lib/python2.7/dist-packages/

Después de eliminar los seis de / usr / lib / funcionó bien: rm /usr/lib/python2.7/dist-packages/*six*


Otra solución es configurar su variable de entorno PYTHONPATH para que apunte a los paquetes instalados.

Configurando mi variable de entorno en mi configuración bash para que:

PYTHONPATH=/Library/Python/2.7/site-packages

Me permitió ejecutar pruebas en el terminal (sin eliminar / renombrar bibliotecas, etc.).

Sin embargo, cuando se usaba PyCharm, no importaba correctamente esta variable de entorno. A pesar de que PyCharm mostraba que incluía variables primarias (con la lista en las que mostraba la importación), parece que esta importación no estaba funcionando correctamente.

Resolver esto configurando manualmente la variable de entorno a lo anterior en la configuración de ejecución de PyCharm.

No estoy seguro de si PyCharm sobrescribe la variable PYTHONPATH después de importarla desde las variables de entorno del sistema o algún otro truco, pero esto resolvió el error para mí.


Se instaló el simulacro == 1.0.1 y eso funcionó por alguna razón. (se encoge de hombros)

edición: la solución real para mí fue actualizar setuptools a la última y me permitió actualizar simulacros y seis a la última. Yo estaba en setuptools 3.3. En mi caso, también tuve que eliminar dichos módulos a mano porque eran propiedad de OS en ''/usr/local/lib/python2.7/dist-packages/''

ver versiones de todo

pip freeze | grep -e six -e mock easy_install --version

Actualizar todo

wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python pip install mock --upgrade pip install six --upgrade

Gracias @lifeless


de modo que mock 1.1.1 y superior define un requisito versionado en seis 1.7 o superior:

https://github.com/testing-cabal/mock/blob/master/requirements.txt#L6

Esto se refleja en los metadatos de setuptools de pbr, que depende de la versión setup_requires depende de:

https://github.com/testing-cabal/mock/blob/master/setup.py#L17

Así que hay un par de posibilidades: 1) seis 1.7 no es lo suficientemente nuevo 2) hay un paquete distro seis que dice ser 1.9.0 que no tiene envolturas por alguna razón 3) las herramientas de configuración en uso no se integraron correctamente con faltan pbr y deps 4) los metadatos de la rueda no están siendo interrogados correctamente por su combinación pip / setuptools.

Tenemos un requisito importante para setuptools 17.1, y eso fue reportado explícitamente más recientemente por setup.py. Me encantaría si pudiera averiguar cuál de estos es el caso y actualizar https://github.com/testing-cabal/mock/issues/298 para que podamos solucionar cualquier interacción que esté llevando a este fallo silencioso de la configuración. py / ruedas.