Python3安裝mysqlclient包


簡單粗暴,直接如題。

安裝mysqlclient==1.4.2.post1版本時,提示:MySQLdb/_mysql.c(29): fatal error C1083: Cannot open include file: 'mysql.h': No such file or directory

按照提示需要安裝MySQL Connecter/C,去官網下載MySQL installer,MySQL完整安裝實在太大了,此處沒有必要。所以選擇custom安裝,找到MySQL Connecter/C,分為x86和64兩種,這里建議安裝x86版本的,原因是在site.cfg中默認配置的是x86的路徑(當然也可以修改這個配置),詳情見下文。

安裝后,再次執行安裝,發現仍然報錯。

到MySQL Connecter/C安裝目錄看,在include下是有mysql.c文件的。

下載mysqlclient==1.4.2.post1的源碼包,查看setup.py,發現有如下代碼:

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()方法:

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配置:

connector = C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2

這里默認配置的是x86的,這就是為什么開始建議安裝x86版本。

但是,即使安裝的是x86,編譯還是報錯的,原因在於 setup.py文件中 client 變量,默認為"mariadbclient",指定的路徑是include/mariadb。

對mariadb和mysql的區別沒有太多概念,所以在這里采用暴力的處理方式,將client定義直接改為mysqlclient。

再次執行安裝,完美~

另外,在查資料的時候發現一個安裝包:https://pypi.org/project/MySQL-python/1.2.5/#files,本來想偷懶下載后直接安裝的,但安裝包運行時的安裝路徑是自動檢索的,如果是用虛擬環境的,估計是需要通過添加環境變量,否則識別不到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM