2017-01-26 13 views
8

Mam skrypt, będący częścią aplikacji Django, który tworzy miniatury z plików pdf. Używam do tego celu pakietu różdżki: Here are the Wand docsProblem PyCharm z komendą runserver

Działa dobrze, jeśli wykonuję ./manage.py runserver z wiersza poleceń, ale jeśli uruchamiam z PyCharm, zepsuje się.

Po przejściu przez kod, problem polega na tym, że kod używany do otwierania obiektu typu blob zawsze zwraca pusty obiekt wand.image. Jest to właściwa klasa (wand.image), ale jest pusta. Obiekt, który przekazuję, jest plikiem pdf, ale konwersja typu blob, która nie powoduje żadnego błędu, jest pusta.

Błąd występuje w następnym wierszu (single_image = all_pages.sequence[0]), ponieważ all_pages jest pusty, więc indeks jest poza zakresem.

Ponownie, jeśli uruchomię serwer z wiersza poleceń, działa, ale jeśli uruchamiam z PyCharm, to się zepsuje.

Używam virtualenv.

Oto kod używam:

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: Oto kilka informacji Debug

Kiedy biegnę z CLI i używać pdb.set_trace() aby sprawdzić wartość all_pages otrzymuję ten

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

Ale kiedy robię to samo z konsoli PyCharm, otrzymuję:

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

Wartość image_binary wydaje się być identyczna w obu przypadkach. Rozróżniłem je.

Ponadto wartość libmagick (instalacja ImageMagick) to /usr/local/lib/libMagickWand.dylib w obu przypadkach.

EDYCJA: To jest interesujące. Jeśli uruchomię PyCharm z terminalu systemu, działa dobrze.

EDIT: Dodano odpowiednie ustawienia konfiguracyjne run

<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

Jak się nazywa? – GRAYgoose124

+0

Z 'views.py':' pdf_thumb = convert_to_thumb (ścieżka_pdf, pub.slug) ' –

+2

Proponuję porównać zmienne środowiskowe w PyCharm i cli – Marat

Odpowiedz

0

EDIT: To jest ciekawe. Jeśli uruchomię PyCharm z terminalu systemu, działa dobrze.

Wygląda na to, że korzystasz z PyCharm z różnymi uprawnieniami użytkownika podczas uruchamiania z terminala.

Powiązane problemy