簡單粗暴,直接如題。python
安裝mysqlclient==1.4.2.post1版本時,提示:MySQLdb/_mysql.c(29): fatal error C1083: Cannot open include file: 'mysql.h': No such file or directorymysql
按照提示須要安裝MySQL Connecter/C,去官網下載MySQL installer,MySQL完整安裝實在太大了,此處沒有必要。因此選擇custom安裝,找到MySQL Connecter/C,分爲x86和64兩種,這裏建議安裝x86版本的,緣由是在site.cfg中默認配置的是x86的路徑(固然也能夠修改這個配置),詳情見下文。sql
安裝後,再次執行安裝,發現仍然報錯。api
到MySQL Connecter/C安裝目錄看,在include下是有mysql.c文件的。post
下載mysqlclient==1.4.2.post1的源碼包,查看setup.py,發現有以下代碼:ui
def get_config(): from setup_common import get_metadata_and_options, enabled, create_release_file metadata, options = get_metadata_and_options() connector = options["connector"] extra_objects = [] # client = "mysqlclient" client = "mariadbclient" vcversion = int(get_build_version()) if client == "mariadbclient": library_dirs = [os.path.join(connector, 'lib', 'mariadb')] libraries = ['kernel32', 'advapi32', 'wsock32', 'shlwapi', 'Ws2_32', client ] include_dirs = [os.path.join(connector, 'include', 'mariadb')] else: library_dirs = [os.path.join(connector, r'lib\vs%d' % vcversion), os.path.join(connector, "lib")] libraries = ['kernel32', 'advapi32', 'wsock32', client ] include_dirs = [os.path.join(connector, r'include')] .......................
繼續查看get_metadata_and_options()方法:spa
def get_metadata_and_options(): config = SafeConfigParser() config.read(['metadata.cfg', 'site.cfg']) metadata = dict(config.items('metadata')) options = dict(config.items('options')) metadata['py_modules'] = list(filter(None, metadata['py_modules'].split('\n'))) metadata['classifiers'] = list(filter(None, metadata['classifiers'].split('\n'))) return metadata, options
可見,這個connecter來自'metadata.cfg', 'site.cfg'兩個文件,查看這兩個配置文件,果真在site.cfg看到了connecter配置:code
connector = C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2
這裏默認配置的是x86的,這就是爲何開始建議安裝x86版本。blog
可是,即便安裝的是x86,編譯仍是報錯的,緣由在於 setup.py文件中 client 變量,默認爲"mariadbclient",指定的路徑是include/mariadb。get
對mariadb和mysql的區別沒有太多概念,因此在這裏採用暴力的處理方式,將client定義直接改成mysqlclient。
再次執行安裝,完美~
另外,在查資料的時候發現一個安裝包:https://pypi.org/project/MySQL-python/1.2.5/#files,原本想偷懶下載後直接安裝的,但安裝包運行時的安裝路徑是自動檢索的,若是是用虛擬環境的,估計是須要經過添加環境變量,不然識別不到。