【问题标题】:Why 64-bit `pip install MySQL-python` refers to `C:\Program Files (x86)\`?为什么 64 位 `pip install MySQL-python` 指的是 `C:\Program Files (x86)\`?
【发布时间】:2021-01-18 13:35:25
【问题描述】:

在具有 64 位 Python 环境的 Windows 上,pip install MySQL-python 包含对 Visual C++ for Python 的调用以编译源代码。默认情况下,此调用总是给出错误的参数,告诉编译器查看 C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\ 是否包含 .h 文件和 .lib 文件。 C:\Program Files (x86)\ 包含 32 位资源,不适用于 64 位。

作为一种解决方法,我将MySQL Connector C64 位 版本完全安装在下面示例中给出的自定义位置,并使用--global-option 调用pip install 命令指定包含和 lib 文件的路径。查看示例命令:

pip install MySQL-python ^
 --force-reinstall --no-cache-dir ^
 --global-option=build_ext ^
 --global-option="-IC:\my\install\MySQL-x64\MySQL Connector C 6.0.2\include" ^
 --global-option="-LC:\my\install\MySQL-x64\MySQL Connector C 6.0.2\lib\opt" ^
 --verbose

我的问题是:

为什么pip install MySQL-python 在 64 位 Python 中默认总是查找 C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\ 的错误目录?这是一个错误,还是我错过了任何设置?输入将受到高度赞赏。

与编译器调用相关的部分屏幕输出:

...
  Created temporary directory: c:\users\admini~1\appdata\local\temp\pip-record-us8ukn
    Running setup.py install for MySQL-python ...     Running command 'C:\my\test-pip\venv-
x64\Scripts\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = 
'"'"'c:\\users\\admini~1\\appdata\\local\\temp\\pip-install-2tppyl\\mysql-python\\setup.py'"'"'; 
__file__='"'"'c:\\users\\admini~1\\appdata\\local\\temp\\pip-install-2tppyl\\mysql-
python\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)
(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, 
'"'"'exec'"'"'))' build_ext '-IC:\my\install\MySQL-x64\MySQL Connector C 6.0.2\include' '-
LC:\my\install\MySQL-x64\MySQL Connector C 6.0.2\lib\opt' install --record 
'c:\users\admini~1\appdata\local\temp\pip-record-us8ukn\install-record.txt' --single-version-externally-
managed --compile --install-headers 'C:\my\test-pip\venv-x64\include\site\python2.7\MySQL-python'
    running build_ext
    building '_mysql' extension
    creating build
    creating build\temp.win-amd64-2.7
    creating build\temp.win-amd64-2.7\Release
    C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for 
Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Dversion_info=(1,2,5,'final',1) -
D__version__=1.2.5 "-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\include" "-
IC:\my\install\MySQL-x64\MySQL Connector C 6.0.2\include" -IC:\my\test-pip\venv-x64\include -IC:\my\test-
pip\venv-x64\PC /Tc_mysql.c /Fobuild\temp.win-amd64-2.7\Release\_mysql.obj /Zl
    _mysql.c
...

正如您在上面看到的,即使路径不存在,它也会告诉编译器引用"-IC:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\include"。感兴趣的也请参考我的another post

【问题讨论】:

  • 看起来可能与site.cfg 文件有关 -> github.com/farcepest/MySQLdb1/blob/…
  • @MarkMoretto,谢谢你的提示。对于这个site.cfg文件,如果我想修改它,它在本地系统中的位置在哪里?
  • 你可以尝试导入它并打印 MySQLdb.__path__[0] 然后那个文件夹可能有它。否则,请检查您的 Python\Lib\site-packages 文件夹以进行安装。

标签: python pip mysql-python


【解决方案1】:

我之前遇到过这类问题。有几件事要立即检查,

  1. 检查 PATH 环境变量。确保 64 位 python 在 PATH 中。从 PATH 变量中删除其他 python 引用。
  2. 开始 -> 运行。输入%userprofile%\AppData\Roaming\Python。通常 Python 会在这个位置安装脚本。确保有冗余。

如果上述步骤无法解决,我可以根据上述结果添加更多步骤。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2015-02-03
    相关资源
    最近更新 更多