在最近,持续六个月的日子里,所做的工作,主要是基于C#语言的开发,中间夹杂一些python的使用,但对django有了陌生(一开始对django的繁多文档就认知不到位),此次的使用过程更是遇到了问题。
所以本次将记录发生的错误和解决方法(自己的排错比较少,百度存在完整的方案但离散不准确)安装mysqlclient提示 ‘cl.exe’ 文件找不到
错误详情描述
工作台windows10,编辑器pycharm,在virtualenv 的python3.6中,执行
pip install mysqlclient
,能够成功下载某个文件,但在安装过程中,会提示,缺少cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -Dversion_info=(1,3,13,'final',0) -D__version__=1.3.13 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" -IF:\PROJECT\BackServer\venv\include -ID:\Python36_64\include -ID:\Python36_64\include "-ID:\Windows Kits\10\include\10.0.17134.0\shared" "-ID: \Windows Kits\10\include\10.0.17134.0\um" "-ID:\Windows Kits\10\include\10.0.17134.0\winrt" "-ID:\Windows Kits\10\include\10.0.17134.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" /Tc_mysql.c /Fobuild\temp.win-amd64-3.6\Release\_mysql.obj /Zl error: command 'cl.exe' failed: No such file or directory当然,这段提示后面还有一段红色的错误提示,如下
Command "F:\PROJECT\BackServer\venv\Scripts\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\Bigpangl\\AppData\\Local\\Temp\\pip-install-eq35sawq\\mysqlclient\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, ' exec'))" install --record C:\Users\Bigpangl\AppData\Local\Temp\pip-record-dsivyzct\install-record.txt --single-version-externally-managed --compile --install-headers F:\PROJECT\BackServer\venv\include\site\python3.6\mysqlclient" failed with error code 1 in C:\Users\Bigpangl\AppData\Local\Temp\pip-install-eq 35sawq\mysqlclient\当我直接去搜索django安装mysqlclient错误时,得到了很多解决方案,例如,安装pyhton的mysql链接器,或者去安装一个全局的mysql和python的程序,或者其他,但是都没法解决或者等等。
解决方案很多,很杂乱,主要原因还是python的版本和windows操作系统缺少一些C++的东西。
从我已知的知识中,有如下几点:
django链接数据库是需要额外的数据库(特指mysql)模块的,在python2.x中,是需要安装mysql-python,python3.x中,是安装mysqlclient。
python3中,可以使用pymysql模块通过设置(可自行百度方案内容)替代mysqlclient的安装(因为后者问题很多而前者安装多数情况不出问题)。
(后面几点是关于安装mysqlclient的解决方式)‘cl.exe’ 这个错误,是关于本机(windows)缺少关于C++的某个编译工具造成的(查询而来,大致是,Microsoft Visual C++ Build Tools),但是这个工具本身,在我试图通过搜索下载并安装时,体验非常差,会导到下载安装visual studio。
pip install mysqlclient
下载到本机的文件是一个压缩文件,后缀tar.gz。python对于tar.gz 包的安装时,通过build ,然后 install 来安装的,是需要一个构建过程,而这个过程,就对开发环境提出了要求,也是前面提示’cl.exe’错误的位置。(这个安装过程,我是理解为,在没有pip工具时,python可以这么个流程,而pip工具是自动化这个过程,所以仍然是需要编译再安装的)。后缀为whl的文件,是编译后的文件,它能够在不具备编译环境的设备上,安装第三方库。但是因为他是提前编译,所以,它需要选择对应的库版本,己方电脑的型号进行下载安装。
https://www.lfd.uci.edu/~gohlke/pythonlibs/ 这个网站,是美国国立卫生研究院设在加利福尼亚州大学生物医学荧光光谱学的研究中心网址,网址上提供多个python第三方库的whl形式,供下载。
所以此处的解决方案就整理出来:
到 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载mysqlclient合适版本并使用pip安装
另外一个问题呢,是django的建立orm 表结构后执行migrate时出现错误。
MigrationSchemaMissing
错误详情描述
错误提示如下:
raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc) django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))操作描述:
创建了django 2.1.1的项目,并在项目中创建了app,配置了mysql链接。
并进行了如下检测:
是否正确配置数据库? 通过dbshell能够进入mysql的查询交互界面,推断配置数据库正确。
账号是否具有相关权限?通过dbshell界面,执行创建,成功,判定账号具有权限。
是否正确执行makegirations结束?执行
python manage.py makemigrations
无错误提示,并且在app的路径下的migrations中,生成0001__initial.py 文件,推断此步骤正确执行完毕。mysql语句是否错误? 通过sqlmigrate用法,成功sql语句,到mysqlworkench 中执行,能够正确生成数据库表信息。
mysqlclient版本在django支持的版本范围内。
进行上述排查的原因是,在百度搜寻到的资料显示,这个error的提示是,makegirations步骤就没有东西,所以是错误的。而此处显然不是这里的错误。
单独去搜索mysql的1064 错误,又是关于mysql语句的错误,但是此处生成的mysql语句又确确实实是能执行的。
然后我猜测,会不会是mysql版本,和django,或者mysqlclient没有对应上,但是mysqlclient是在版本范围内的,所以,是不是django版本太新了(2.1.1是此时的最新版)。
最后发现,django 2.1.1 版本并不支持mysql5.5(相当于是放弃了一个老版本的mysql版本的支持):https://docs.djangoproject.com/en/2.1/releases/2.1/#dropped-support-for-mysql-5-5PS
在安装mysql时,为了方便,下载了msi格式的文件进行了安装,而有这个格式的mysql版本,只有5.5.x了(社区版),所以,一开始就不该偷懒。
从django的版本发布历史(pypi网站)来看,2.1.1,是18年发布的,没有去关注它的更新说明。
文章转载自写程序的日子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




