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

时间:2018-07-19 03:44:57

标签: python c++ visual-studio tensorflow

我使用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并建议一些路径:

asking for path

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

  

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

     

源文件与模块创建时的文件不同   产生。您要调试器使用它吗?

当我选择“是”时,出现错误消息,如下所示:

error in VS

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

1 个答案:

答案 0 :(得分:0)

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构建的(希望他们没有应用任何私有补丁-否则,您就没有了。运气)。

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