【问题标题】:Visual Studio keeps asking for Python source file when running a Python extension project运行 Python 扩展项目时,Visual Studio 不断询问 Python 源文件
【发布时间】:2018-07-19 03:44:56
【问题描述】:

我使用 Python3.6 生成 tensorflow 的 Faster-RCNN 的(在 github:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5).pb 文件,并用 Python3.6 运行这个 .pb 文件。

我还写了一个 MFC 程序(Win10 + VS2015 + C++ + Tensorflow1.8 GPU 和 CPU 版本)来读取和测试这个 .pb 文件,但是当我运行代码时:

m_session->Run({ { strParaName1, m_TensorInput[0] },
                 { strParaName2, data_ } },
               { opName1, opName2, opName3, opName4 },
               {},
               &m_TensorOutput).ok())

MFC 弹出一个对话框,说它需要pystate.c 并建议一些虚假路径:

我从https://github.com/python/cpython/blob/2.7/Python/pystate.c 下载了一个“pystate.c”文件。当我选择它时,MFC 显示如下错误:

模块:C:\ProgramData\Anaconda3\python36.dll

源文件与模块运行时的文件不同 生成。你想让调试器使用它吗?

当我选择“是”时,我得到带有错误消息的源,如下所示:

我猜这个pystate.c是py2.7的版本,我的python版本是3.6,所以这个文件可能不适合。

【问题讨论】:

  • 我卸载 Anaconda3 和 Anaconda3 'phthon3.6.5,然后我从以下位置安装 python:python.org/downloads/release/python-365 python-amd64.exe,并下载 python3.6.5 的杠球。但是最后一张图的错误还是出现了:“interp is nullptr”。我觉得这次pystate.c适合python36.dll,但是还有其他未知错误。

标签: python c++ visual-studio tensorflow


【解决方案1】:

Visual Studio 的调试器将检查 Python 的源代码,无论出于何种原因(据我所知,发生了一些 C 级错误)并询问其位置。

要提供它,您需要获得与您的 Python 副本完全相同的源代码。 默认情况下,对话框提供的虚假路径是保存在可执行文件中的路径。这是构建机器上的源代码所在的位置,您的 Python 副本是在何时何地构建的。

Anaconda 显然懒得为其二进制包提供相应的源(许多私有打包生态系统共有的特征;对于 (L)GPL 涵盖的软件,这是违反许可的,但 Python 的许可允许这样做) ,留你自己在这里。

幸运的是,Python 在它的可执行文件中留下了一些你需要哪些资源的指针。例如,对于 Anaconda 的 Python 3.6.5:

>>> import sys, platform

>>> sys.version
'3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64-bit (AMD64)]'

>>> sys.version_info
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)

>>> platform.python_revision()
''

所以,这是 3.6.5 版本,由于没有 revision,它可能是从官方 tarball 构建的(希望他们没有应用任何私有补丁 - 否则,你就不走运了) .

所以,下载 tarball(对于 3.6.5,它位于 https://www.python.org/downloads/release/python-365/ ,在“Gzipped source tarball”条目下),将其解压到某个位置并将 VS 指向结果树中的相应文件。几次后,它应该会开始自动拾取更多文件。

【讨论】:

  • 非常感谢您对我的帮助!你说的没错,我的 Anaconda3-python 是 3.6.5 版本,我卸载 Anaconda3 和 Anaconda3 'phthon3.6.5,然后我从:python.org/downloads/release/python-365python-amd64.exe 安装 python。上图的错误依旧出现:“interp is nullptr”,我觉得这次pystate.c是适合python36.dll,但是还有其他未知错误。
  • @EdwardMa 为什么会发生这个错误是完全不同的事情。请作为一个单独的问题提出。在其中,为了让我们能够帮助您,请务必提供How to Ask 中指定的信息,包括minimal reproducible example
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多