运行 Python 扩展项目时,Visual Studio 不断询问 Python 源文件

Posted

技术标签:

【中文标题】运行 Python 扩展项目时,Visual Studio 不断询问 Python 源文件【英文标题】:Visual Studio keeps asking for Python source file when running a Python extension project 【发布时间】: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,但是还有其他未知错误。 【参考方案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。

以上是关于运行 Python 扩展项目时,Visual Studio 不断询问 Python 源文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio Code 中调试 python 程序时更改代码

从源代码运行 Visual Studio Code 时“未找到扩展”

Visual Studio运行Python报No module named 'django'

Visual Studio安装程序项目扩展 - 安装服务

创建 Visual Studio 扩展时如何获取源代码管理历史记录窗口中的选定项目?

为啥python3编了一个文件比对程序运行结果出来以后中文变成问号了.哪里的问题求大神?