【问题标题】:PyCharm issue with runserver command运行服务器命令的 PyCharm 问题
【发布时间】:2017-01-26 21:33:45
【问题描述】:

我有一个脚本,它是 Django 应用程序的一部分,可以从 pdf 中生成缩略图。我正在使用出色的魔杖包来做到这一点:Here are the Wand docs

如果我从命令行执行./manage.py runserver,它运行良好,但如果我从 PyCharm 运行,它会中断。

当我单步执行代码时,问题是用于打开 blob 的代码总是返回一个空的 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

编辑:这里有一些调试信息

当我从 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

编辑:这很有趣。如果我从系统终端启动 PyCharm,它可以正常工作。

编辑:添加了相关的运行配置设置

<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>

【问题讨论】:

  • 怎么叫的?
  • 来自views.py: pdf_thumb = convert_to_thumb(pdf_path, pub.slug)
  • 我建议比较 PyCharm 和 cli 中的环境变量
  • @Marat,是的,我试过了。除非 PyCharm 中某处隐藏了环境变量(即,不在“编辑配置”面板中),否则不是这样。环境变量是一样的。
  • 我建议检查 pdb 中的几个值,例如sys.executableos.environwand.image.__file__。您也可以尝试以不同方式加载图像,例如WandImage(filename=pdf_path) 看看是否会引发更明确的错误。

标签: python django pycharm wand


【解决方案1】:

编辑:这很有趣。如果我从系统终端启动 PyCharm,它可以正常工作。

从终端启动时,听起来您正在使用不同的用户权限运行 PyCharm。

【讨论】:

    【解决方案2】:

    几个月前我遇到了这个问题。我发现修复它的唯一方法是在管理员模式下启动所有内容。这可能是系统权限被拒绝的问题。

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 2021-04-02
      • 2015-04-18
      • 2023-03-16
      • 1970-01-01
      • 2016-11-28
      • 2022-01-12
      • 2017-10-29
      相关资源
      最近更新 更多