web-dev-qa-db-fra.com

python/Django - "Impossible d'utiliser ImageField, car Pillow n'est pas installé"

Je participe à un projet et je souhaite donc créer l'environnement. Ce que j'ai fait est:

pip install -r requirements.txt

Cette entièrement installé toutes les exigences, y compris Django 1.7.0, Pillow 2.4.0 et quelques autres.

Ensuite, je veux construire la base de données:

python manage.py migrate

Et boum, erreur, je reçois ce qui suit:

CommandError: System check identified some issues:

ERRORS:
stu.chan.icon: (fields.E210) Cannot use ImageField because Pillow is not installed.
    HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command "pip install pillow".
stu.chan.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
    HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command "pip install pillow".
stu.Piec.icon: (fields.E210) Cannot use ImageField because Pillow is not installed.
    HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command "pip install pillow".

comme si je n'avais pas installé Pillow. J'ai donc vérifié le paquet installé (avec this technique) et Pillow 2.4.0 IS installé.

Ensuite, j'ai aussi essayé de forcer la réinstallation: pip install --upgrade --force-reinstall Pillow==2.4.0

Mais rien à faire, je reçois la même erreur en exécutant migrate.

J'utilise python 3.4.0 et Django 1.7.0 sur un Mac OS X 10.6.7 encapsulé dans virtualenv 1.11.6 avec le pip descendu à pip 1.2.1à cause de certains _ bien connus-encore-non-entièrement-résolus-non-compris-_ (issue avec pip et ssl).

Tout le code ci-dessus est dans virtualenv (bin/activate terminé).

Avez-vous des idées sur pourquoi ce problème et comment le résoudre?

- - - - - - EDIT - - - - - -

Lorsque j'exécute la commande force-réinstaller ci-dessus (il y a tellement de code que je ne peux pas le coller du tout), même si elle se termine par "Oreiller correctement installé", le code contient quelques avertissements:

building 'PIL._imaging' extension
 (blabla code)
    _imaging.c:975:13: warning: array index of '1' indexes past the end of an array (that contains 1 elements) [-Warray-bounds]
        value = PyTuple_GET_ITEM(xy, 1);
                ^~~~~~~~~~~~~~~~~~~~~~~
    /usr/local/include/python3.4m/tupleobject.h:58:34: note: instantiated from:
    #define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
                                     ^
    /usr/local/include/python3.4m/tupleobject.h:27:5: note: array 'ob_item' declared here
        PyObject *ob_item[1];
        ^
    1 warning generated.

(blabla code)
   libImaging/Unpack.c:867:1: warning: unused function 'copy3' [-Wunused-function]
    copy3(UINT8* out, const UINT8* in, int pixels)
    ^
    1 warning generated.
10
lapin

J'ai essayé :

  • Réinstallez globalement PIL en compilant "Imaging-1.1.7" en utilisant les instructions ici , mais n'a pas fonctionné
  • Réinstallez Pillow et sa dépendance globalement en utilisant ce lien , mais n'a pas fonctionné
  • Réinstallez GCC4.2 en utilisant ce lien , mais cela n'a pas fonctionné

J'ai finalement compris que j'étais dans le cas décrit dans la merveilleuse réponse à cet article . En d'autres termes, j'exécute un Mac dont le processeur est capable de 64 bits, mais dont le micrologiciel du noyau est défini sur 32 bits. Ce qui est un problème car le projet sur lequel je travaille a été construit pour 64 bits.

Comme expliqué dans this post , lorsque vous installez python3 à l'aide d'un programme d'installation (DMG), il détectera si le noyau est défini sur 32 bits et installera la version 32 bits de python en conséquence. Mais si vous venez de télécharger le code source du site Web de python et de l’installer avec:

cd Python-3.4.1
./configure
make
Sudo make install

Ensuite, la version 64 bits de python3 devrait être installée. Que vous pouvez vérifier en faisant:

file /usr/local/bin/python3
/usr/local/bin/python3: Mach-O 64-bit executable x86_64

Ceci fait, tous les problèmes sont résolus avec PIL/Pillow dans virtualenv avec cette version 64 bits de python3. Même le déclassement pip est devenu inutile.

5
lapin

J'avais ce problème sur un Mac avec Python 3.6.4. La solution consistait à désinstaller Pillow 5.1.0 et à installer à la place 5.0.0.

pip uninstall Pillow
pip install Pillow==5.0.0
20
PatrickReagan

Avait un problème similaire, et ma solution était beaucoup plus simple: 

Apparemment, les paquets PIL et Pillow ne peuvent pas coexister. Si vous souhaitez utiliser Pillow, vous devez d’abord désinstaller PIL, puis installer Pillow.

Si vous êtes sur Mac, vous devez également installer quelques bibliothèques en utilisant brew. Mentionné ci-dessous est la séquence des étapes:

$pip uninstall PIL
$brew install libtiff libjpeg webp little-cms2
$pip install Pillow

Pour vérifier si pillow est installé et prêt à être utilisé, ouvrez l'interpréteur python et essayez d'importer les éléments suivants:

>>> from PIL import Image

* Notez que la bibliothèque dit toujours PIL, mais qu’elle importe maintenant de Pillow au lieu de PIL. 

Si vous êtes en mesure d'importer avec succès, vous êtes prêt à intervenir (vous n'aurez probablement pas à vous soucier de la configuration des installations PYTHONPATH ou 32/64 bits)

Source: https://pillow.readthedocs.io/en/latest/installation.html

1
The Wanderer

J'ai eu cette erreur en utilisant le débogueur de PyCharm. Je devais aller dans Paramètres -> 'Interprète de projet' mettre en surbrillance 'Oreiller' et cliquer sur la petite flèche vers le haut à droite pour le mettre à jour. Puis l'erreur a disparu.

1
slashdottir

J'avais trop le même problème en implémentant Image Upload avec CLoudinary, mais j'ai trouvé la réponse ci-dessus, mais d'une autre manière.

 Sudo pip uninstall PIL

 Sudo pip uninstall Pillow

 Sudo pip install Pillow

Après que le mien Problème a été résolu!

1
MD Shahrouq

macOS High Sierra 10.13.6 Ma solution a été

pip3 install Pillow

Ne pas

pip install Pillow
0
Nick Patsiuk

Pour python3, assurez-vous que votre $PYTHONPATH a le chemin virtualenv et Au lieu d'exécuter la commande

python manage.py migrate

Courir:

python3 manage.py migrate