我使用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,所以这个文件可能不合适。
答案 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指向结果树中的相应文件。几次之后,它应该开始自动拾取更多文件。