Ich habe ein Skript, Teil einer Django App, die Thumbnails aus PDFs erstellt. Ich bin mit dem ausgezeichneten Stab Paket, es zu tun: Here are the Wand docsPyCharm Problem mit runserver Befehl
Es läuft gut, wenn ich ./manage.py runserver
von der Kommandozeile zu tun, aber wenn ich von PyCharm laufen, es bricht.
Wenn ich durch den Code gehe, ist das Problem, dass der Code zum Öffnen des Blobs immer ein leeres wand.image
Objekt zurückgibt. Es ist die richtige Klasse (wand.image
), aber es ist eine leere. Das Objekt, das ich übergeben habe, ist eine PDF, aber die Blob-Konvertierung, die überhaupt keinen Fehler erzeugt, ist leer.
Der Fehler tritt in der nächsten Zeile auf (single_image = all_pages.sequence[0]
), weil all_pages
leer ist, so dass der Index außerhalb des Bereichs liegt.
Noch einmal, wenn ich den Server von der Befehlszeile aus starte, funktioniert es, aber wenn ich von PyCharm starte, bricht es.
Ich benutze virtualenv.
Hier ist der Code, den ich laufen:
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: Hier ist ein Debug-Info
Wenn ich von CLI ausführen und verwenden pdb.set_trace()
den Wert von all_pages
Ich erhalte diese
(Pdb) p all_pages
<wand.image.Image: 3da0549 'PDF' (612x792)>
überprüfen
Aber wenn ich das gleiche von der PyCharm-Konsole mache, bekomme ich:
(Pdb) >? p all_pages
<wand.image.Image: (empty)>
Der Wert image_binary
scheint in beiden Fällen identisch zu sein. Ich habe sie diffamiert.
Darüber hinaus ist der Wert libmagick
(die ImageMagick Installation) in beiden Fällen /usr/local/lib/libMagickWand.dylib
.
EDIT: Das ist interessant. Wenn ich PyCharm vom System Terminal aus starte, funktioniert es einwandfrei.
EDIT: Hinzugefügt relevante Laufkonfigurationseinstellungen
<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>
Wie heißt es? – GRAYgoose124
Von 'views.py':' pdf_thumb = convert_to_thumb (pdf_path, pub.slug) ' –
Ich würde vorschlagen, Umgebungsvariablen in PyCharm und CLI zu vergleichen – Marat