运行 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'