【问题标题】:Getting Error while building mysql for python on Mac OS X El Capitan在 Mac OS X El Capitan 上为 python 构建 mysql 时出错
【发布时间】:2016-12-12 13:52:32
【问题描述】:

我阅读了一些相关主题并尝试针对我的情况实施这些解决方案,但在执行此命令后仍然出现以下错误:

(project2_env) Efe-MacBook-Air:MySQL-python-1.2.4b4 efe$ python setup.py build

错误信息是:

    Extracting in /var/folders/rv/vbf7xqh1601_xjkrn85w7hp00000gn/T/tmpptpsggg7
Traceback (most recent call last):
  File "/Users/efe/virtualenvs/downloads/MySQL-python-1.2.4b4/distribute_setup.py", line 143, in use_setuptools
    raise ImportError
ImportError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup.py", line 7, in <module>
    use_setuptools()
  File "/Users/efe/virtualenvs/downloads/MySQL-python-1.2.4b4/distribute_setup.py", line 145, in use_setuptools
    return _do_download(version, download_base, to_dir, download_delay)
  File "/Users/efe/virtualenvs/downloads/MySQL-python-1.2.4b4/distribute_setup.py", line 125, in _do_download
    _build_egg(egg, tarball, to_dir)
  File "/Users/efe/virtualenvs/downloads/MySQL-python-1.2.4b4/distribute_setup.py", line 99, in _build_egg
    _extractall(tar)
  File "/Users/efe/virtualenvs/downloads/MySQL-python-1.2.4b4/distribute_setup.py", line 486, in _extractall
    self.chown(tarinfo, dirpath)
TypeError: chown() missing 1 required positional argument: 'numeric_owner'

编辑:我重新安装了homebrew,然后运行以下命令。即安装成功。

brew install mysql

但是,我仍然无法在 python 中导入 MySQLdb。

【问题讨论】:

    标签: mysql mysql-python osx-elcapitan python-3.5


    【解决方案1】:

    由于比上一个答案复杂,python mysql的自定义安装就不告诉你了。

    发现这个,裘德的方式:

    通过homebrew安装mysql,然后可以通过pip安装mysql python。

    xcode-select --install
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    //don't know how to install mysql via homebrew, but it should be done here
    pip install MySQL-python
    

    https://*.com/a/25356073/6660122

    【讨论】:

    • 原来我已经自制了。然后,我尝试了pip install MySQL-python,但现在我得到了一个不同的错误:Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/rv/vbf7xqh1601_xjkrn85w7hp00000gn/T/pip-build-yi9i16p8/MySQL-python/
    • 我卸载了自制软件,然后再次安装。之后,我再次尝试了这个命令:pip install MySQL-python,我得到了一个新的不同错误:-bash: /Users/efe/virtualenvs/project2_env/bin/pip: /Users/efe/virtualenvs/project2_env/bin/python3: bad interpreter: No such file or directory
    • 前面说了两次,必须先通过homebrew安装mysql,然后再通过homebrew安装python-mysql。 3secs 谷歌搜索说:brew install mysql
    • 对不起,我的错。我通过你说的命令安装了它:brew install mysql。这是成功的。然后我再次尝试pip install MySQL-python 并得到了与我在之前的评论中写的相同的错误。我也尝试在python中导入MySQLdb,但没有成功。
    • 至少你的案子可以更好地记录在案:') 继续!
    【解决方案2】:

    取自Python2 doc,在 3.5 中仍然相关:

    "替代安装:用户方案

    此方案旨在为没有全局站点包目录写入权限或不想安装到其中的用户提供最方便的解决方案。它通过一个简单的选项启用:“

    python setup.py install --user
    

    可以为您提供帮助。

    注意有不同的方案可以使用:--home,或--prefix 和--exec-prefix,或--install-base 和--install-platbase

    【讨论】:

    • 也许可以试试:python setup.py install --home。您似乎遇到了权限问题,但我不知道该怎么做。
    【解决方案3】:

    最后我自己找到了解决方案。我放弃了直接使用 MySQLdb 库,而是安装了 PyMySQL。顺便说一句,我之前已经安装了 MySQL Workbench,所以 mysql 服务器已经在运行了。

    这是我一步一步做的。我希望有人能从中受益。

    1) 创建虚拟环境:

    virtualenv virt1
    

    2) 激活您的虚拟环境:

    source virt1/bin/activate
    

    3) 现在,您处于虚拟环境中。安装 PyMySQL:

    pip install PyMySQL
    

    4) 现在,用一个简单的 py 可执行文件试试你的 MySQL 连接是否正常:

    #!/usr/bin/python
    
    import pymysql.cursors
    
    # Connect to the database
    connection = pymysql.connect(host='localhost',
                                 user='YourDBuserName',
                                 password='YourDBpassword',
                                 db='YourDBname',
                                 charset='utf8',
                                 cursorclass=pymysql.cursors.DictCursor)
    
    try:
        with connection.cursor() as cursor:
            # Read a single record
            sql = "SELECT `id`, `name` FROM `YourTableName` WHERE `id`=%s"
            cursor.execute(sql, (1,))
            result = cursor.fetchone()
            print(result)
    finally:
        connection.close()
    

    5) 您应该会看到表格中的第一行出现在屏幕上。

    注意:“import pymysql.cursors”部分可能很棘手。首先,我写为“import PyMySQL.cursors”,但没有用!

    【讨论】: