python2.7嵌入c++的故事之一:c++调用脚本出现Import error: no module named错误

楔子:

网上有人说,Python适合做host宿主语言,如果性能不行,则通过c++优化;如果作为嵌入脚本,则有线程安全等诸多问题。

不幸的是,项目要求找一个合理的脚本语言,千挑万选,各有利弊,最终还是走上了小心翼翼的嵌入python之路。福兮祸兮,且看慢慢分解。

 

第一回  脚本嵌入c++   不同环境两重天 

             -----python2.7嵌入vc6,脚本出现Import error: no module named错误


1、现象:脚本中使用了诸如 import ctypes,import MySQLdb等外部lib时,出现Import error: no module named错误
         单使用python2.7自己的解释器,同样的脚本运行正常。
2、处理过程:
   对比在c++里面显示的python的sys.path,和在python解释器里 的sys.path显示,

python2.7解释器里面的显示
>>> import sys
>>> sys.path
['D:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python27.zip', 'D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\lib-tk', 'D:\\Python27', 'D:\\Python27

\\lib\\site-packages']
>>>

c++中的显示
disp sys.path
'D:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python27_d.zip', 'D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win', 'D:\\Python27\\lib\\lib-tk', 'D:\\Python27', 'D:\\Python27

\\lib\\site-packages'


发现c++用的是C:\\WINDOWS\\system32\\python27_d.zip,解释器为python27.zip
猜测python27_d的版本应该是调试版本。在vc6中,bulid->set active configration中选择Win32 release,
察看c++中的python sys.path,已经为没有_d的参数了。
重新测试系统正常。

ps:c++中察看python sys.path的方法
1、调用PyRun_SimpleString("import   sys")
2、调用PyRun_SimpleString("print sys.path")

 

 

二、另附网上文章:python 连接 MYSQLdb 的 No module named MySQLdb的各种错误,供大家参考。

Python,Django安装MySQLdb各种经典错误(Error No module named MySQLdb)2012-03-02 17:06Python,Django安装MySQLdb各种经典错误(Error No module named MySQLdb)

前文:

这几日有些闲,于就想把前面断断续续学习Django WEB框架真正搭建起来,并使用mysql数据库。可是,真正在搭建过程中遇到了各式各样的错误。因此,在此特别记录一下。

(python shell 里能正常import MySQLdb 模块,但是Django里manage.py runserver 报错:No module named MySQLdb,见第四错)

 

准备工作:

首先肯定得先安一个python,实际上我机子上已经有了2.7版的了,不过为学习Django我又上官网去下载了一个python2.6版本的。

之后又去Django官网下载了最新的Django框架,并上http://sourceforge.net/projects/mysql-python/  去下载了window 版本的MySQLdb。

Django,MySQLdb都到 python2.6安装目录下的 lib/site-packages/里(实际上:下载Django window版后,解压里面的文件目录只copy

django目录就OK了)。

一切安装好后,开始import 工作了。

第一个错误:


Traceback (most recent call last):

  File "<pyshell#1>", line 1, in <module>

    import MYSQLdb

ImportError: No module named MYSQLdb

原因:


模块名称写错了把MySQLdb写成了MYSQLdb

解决方法:大虾们一定学好E文!

第二错误:

import MySQLdb


Traceback (most recent call last):

  File "<pyshell#2>", line 1, in <module>

    import MySQLdb

  File "D:\PythonDev26\Lib\site-packages\MySQLdb\__init__.py", line 19, in <module>

    import _mysql

ImportError: DLL load failed: 找不到指定的模块。


 

原因:花了一定时间去google,baidu,发现原来window 版本的MySQLdb需要两个dll文件的支持。

解决方法:参考《在python中使用MySQL》,再运行 import MySQLdb,又出现错误信息了。

 

第三错误:


Warning (from warnings module):

  File "D:\PythonDev26\Lib\site-packages\MySQLdb\__init__.py", line 34

    from sets import ImmutableSet

DeprecationWarning: the sets module is deprecated

原因:看错误提示貌似是说 sets module 被弃用了。

解决方法:又花了一定时间去google,baidu。最终参考《在python中使用MySQL》


现在再在python shell里再运行“import MySQLdb” ,OK~~一切正常~

好了,现在要在Django里使用mysql了,不过在开始之前我们还得看看安装是否正常:


import  sys

import  django

import  MySQLdb

print sys.version_info

print django.VERSION

print MySQLdb.version_info


输出:


(2, 6, 6, 'final', 0)

(1, 2, 7, 'final', 0)

(1, 2, 2, 'final', 0)


恩,只少说到目前为止一切正常。

先按照官网手册进行,进入django/bin 目录里,打开cmd。输入 python django-admin.py startproject mysite 开始一个项目,进入刚才新建项目 mysite目录里,在cmd里运行 python manage.py runserver 开始一个开发用的web server。

恩,没有什么问题,通过http://localhost:8000/也能访问到像其官网所说“淡蓝色的,柔和”的页面。OK,我们开始配置数据库吧,进入settings.py里找到12行进行mysql数据库的配置:


 DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql', # 数据库API'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

        'NAME': 'test',                      # 数据库

        'USER': 'user',                      # 用户名

        'PASSWORD': '',                  # 密码

        'HOST': 'localhost',               # 主机地址

        'PORT': '3306',                      # 端口

    }

}

好,我们再重新run一次:python manage.py runserver

OH。。。。MY GOD......

怎么了????

 

第四个错误:

.... backend = __import__('%s%s.base' % (_import_path, settings.DATABASE_ENGINE),

{}, {}, [''])
  File "D:\Python\Python24\Lib\site-packages\django\db\backends\mysql\base.py",
line 13, in ?
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No mo
dule named MySQLdb

原因:这是什么??怎么会这样?python shell 里import MySQLdb 也没有任何错误呀?????

          查网络了半天,http://stackoverflow.com/questions/770904/installing-django-on-shared-server-no-module-named-mysqldb这家伙好像有这问题。最后在“laofo” 里找出原因:原来我之前装过python2.7,又在python里装过Django,并且设置过window环境变量路径Path和PYTHONPATH为python2.7的,但是没有装过MySQLdb,所以文件被关联到python2.7里了。

解决方法:重新设置一下环境变量,确保安装路径等是正确的。

 

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值