2017-01-26 11 views
8

私は、pdfsからサムネイルを作成するDjangoアプリケーションの一部のスクリプトを用意しています。私は優れたワンドパッケージを使っています:Here are the Wand docs コマンドラインから./manage.py runserverを実行するとうまく動作しますが、PyCharmから実行した場合、正常に動作します。runserverコマンドでPyCharmの問題

コードをステップ実行すると、ブロブを開くために使用されるコードが常に空のwand.imageオブジェクトを返すという問題があります。それは正しいクラス(wand.image)ですが、空のクラスです。私が渡すオブジェクトはpdfですが、エラーをまったく発生させないBLOB変換は空です。

all_pagesが空でインデックスが範囲外であるため、次の行(single_image = all_pages.sequence[0])でエラーが発生します。

また、コマンドラインからサーバーを起動すると動作しますが、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 

編集:ここではいくつかのデバッグ情報だ

を私はCLIから実行し、all_pagesの値をチェックするpdb.set_trace()を使用する場合、私はこの

(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です。

編集:これは興味深いです。 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をさまざまなユーザー権限で実行しているような音がします。