Установка модуля на Heroku - PullRequest
3 голосов
/ 24 января 2012

Я развернул что-то, что работало на моем локальном компьютере, и понял, что когда я развернул, модуль, который я использовал, не был установлен на Heroku, таким образом, я получил ошибку, подобную этой:

...
    from PIL import Image
ImportError: No module named PIL

Я пробовал:

heroku run pip install PIL

но я получаю это:

ImportError: No module named setuptools.command

редактировать

Итак, я перешел к настройке heroku и повторил шаги по установке django и postgres. По сути, я активировал среду, а затем запустил

pip install PIL

Похоже, это сработало, я получил много информации, а потом все закончилось подтверждением того, что PIL был установлен. Но опять же, он сказал, что не может найти PIL, когда я запустил новый файл.

Ответы [ 4 ]

13 голосов
/ 24 января 2012

Каждая команда, которую вы запускаете в Heroku, выполняется в изолированной и эфемерной среде - любые изменения, которые вы делаете во время heroku run, отбрасываются сразу после завершения процессов.

Чтобы сделать PIL доступным для вашего приложения, вам нужно добавить его в requirements.txt.

1 голос
/ 07 августа 2014

Даже когда я столкнулся с той же проблемой, я потратил довольно много времени.

Я пробовал это

heroku run pip install PIL --app=your-app

Ошибка:

Running `pip install PIL` attached to terminal... up, run.1983
Downloading/unpacking PIL
  Could not find any downloads that satisfy the requirement PIL
  Some externally hosted files were ignored (use --allow-external PIL to allow).
Cleaning up...
No distributions at all found for PIL
Storing debug log for failure in /app/.pip/pip.log

Но это помогает как талисман:)

heroku run pip install Pillow --app=your-app

1 голос
/ 24 января 2012

Иногда пакет PIL добавляется на ваш путь, но он находится где-то еще, чем в site-packages .В этом случае вы сможете просто import Image.

Чтобы убедиться, попробуйте что-то вроде этого:

>>> import sys
>>> sys.path
[(...), '/usr/lib/python2.7/dist-packages/PIL', (...)]
>>> from PIL import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL
>>> import Image
>>> Image
<module 'Image' from '/usr/lib/python2.7/dist-packages/PIL/Image.pyc'>

В своих приложениях я использую код, подобный этому:

try:
    import Image, ImageDraw, ImageFont
except:
    from PIL import Image, ImageDraw, ImageFont
1 голос
/ 24 января 2012

Вы уверены, что следовали http://devcenter.heroku.com/articles/django#prerequisites и ваш virtualenv загружен?

Кстати, я рекомендую использовать Подушка вместо PIL.

Введение

Цель автора развилки - способствовать улучшению упаковки с помощью:

Публичная разработка и привлечение поддержки сообщества. Изучение проблем с упаковкой внутри вилки, наиболее заметно через добавление поддержки setuptools, а также очистка и рефакторинг код упаковки. Почему вилка?

PIL в настоящее время не совместим с setuptools. Посмотри пожалуйста http://mail.python.org/pipermail/image-sig/2010-August/006480.html для более подробное объяснение. Кроме того, текущий выпуск / обслуживание PIL График не совместим с различными и частыми возникшие проблемы.

...