2017-01-26 8 views
8

У меня есть скрипт, входящий в приложение Django, который создает миниатюры из PDF-файлов. Я использую отличный пакет палочек для этого: Here are the Wand docsПроблема PyCharm с командой runerver

Он работает нормально, если я делаю ./manage.py runserver из командной строки, но если я бегу от PyCharm, он ломается.

Когда я просматриваю код, проблема в том, что код, используемый для открытия блока, всегда возвращает пустой объект wand.image. Это правильный класс (wand.image), но он пустой. Объект, который я передаю, это pdf, но преобразование blob, которое вообще не вызывает ошибки, пуст.

Ошибка возникает в следующей строке (single_image = all_pages.sequence[0]), потому что all_pages пуст, поэтому индекс выходит за пределы допустимого диапазона.

Опять же, если я запускаю сервер из командной строки, он работает, но если я запускаю из PyCharm, он прерывается.

Я использую virtualenv.

Вот код, я бегу:

from wand.image import Image as WandImage 
from wand.color import Color 


def convert_to_thumb(pdf_path, slug): 
    with open(pdf_path) as f: 
     image_binary = f.read() 
    all_pages = WandImage(blob=image_binary) #<-- Here image_binary is a pdf 
    single_image = all_pages.sequence[0]  #<-- BOOM! all_pages is a wand.image, but it's empty. Gives an Index error 
    with WandImage(single_image) as i: 
     i.format = 'png' 
     i.background_color = Color('white') 
     i.alpha_channel = 'remove' 
     i.transform(resize='x100') 
     save_name = slug + '_pdf_preview.png' 
     i.save(filename='/foo/bar/' + save_name) 

     return i 

EDIT: Вот некоторые Debug информация

Когда я бегу из CLI и использовать pdb.set_trace() проверить значение all_pages я получаю эту

(Pdb) p all_pages 
<wand.image.Image: 3da0549 'PDF' (612x792)> 

Но когда я делаю то же самое с консоли PyCharm, я получаю:

(Pdb) >? p all_pages 
<wand.image.Image: (empty)> 

Значение image_binary похоже, совпадает с в обоих случаях. Я их различал.

Кроме того, значение libmagick (установка ImageMagick) равно /usr/local/lib/libMagickWand.dylib в обоих случаях.

EDIT: Это интересно. Если я запустил PyCharm из системного терминала, он отлично работает.

EDIT: Добавлены соответствующие параметры конфигурации запуска

<configuration default="false" name="foo_bar_app" type="Python.DjangoServer" factoryName="Django server"> 
    <option name="INTERPRETER_OPTIONS" value="" /> 
    <option name="PARENT_ENVS" value="true" /> 
    <envs> 
    <env name="PYTHONUNBUFFERED" value="1" /> 
    <env name="FOO_USERID" value="foobar" /> 
    <env name="DJANGO_SETTINGS_MODULE" value="foo_bar.settings" /> 
    </envs> 
    <option name="SDK_HOME" value="$USER_HOME$/venv/foo_bar/bin/python" /> 
    <option name="WORKING_DIRECTORY" value="" /> 
    <option name="IS_MODULE_SDK" value="false" /> 
    <option name="ADD_CONTENT_ROOTS" value="true" /> 
    <option name="ADD_SOURCE_ROOTS" value="true" /> 
    <module name="foo_bar_app" /> 
    <option name="launchJavascriptDebuger" value="false" /> 
    <option name="port" value="8000" /> 
    <option name="host" value="" /> 
    <option name="additionalOptions" value="" /> 
    <option name="browserUrl" value="" /> 
    <option name="runTestServer" value="false" /> 
    <option name="runNoReload" value="false" /> 
    <option name="useCustomRunCommand" value="false" /> 
    <option name="customRunCommand" value="" /> 
    <RunnerSettings RunnerId="PyDebugRunner" /> 
    <RunnerSettings RunnerId="PythonCover" /> 
    <RunnerSettings RunnerId="PythonRunner" /> 
    <ConfigurationWrapper RunnerId="PyDebugRunner" /> 
    <ConfigurationWrapper RunnerId="PythonCover" /> 
    <ConfigurationWrapper RunnerId="PythonRunner" /> 
    <method /> 
</configuration> 
+0

Как это называется? – GRAYgoose124

+0

Из 'views.py':' pdf_thumb = convert_to_thumb (pdf_path, pub.slug) ' –

+2

Я бы предложил сравнить переменные среды в PyCharm и cli – Marat

ответ

0

EDIT: Это интересно. Если я запустил PyCharm из системного терминала, он отлично работает.

Похоже, что вы запускаете PyCharm с разными разрешениями пользователей при запуске с терминала.

Смежные вопросы