【问题标题】:How to compile and install pysqlcipher for python 2.7 on Windows 7如何在 Windows 7 上为 python 2.7 编译和安装 pysqlcipher
【发布时间】:2015-01-25 02:17:15
【问题描述】:

我最近在 Windows 7 上安装了 Python 2.7。在我的试用过程中,我还为 python、MinGW、Visual C++ for Python 和 OpenSSL 安装了 setuptools 和 pip。在我的 %PATH% 中都有条目,并且环境变量 VS90COMNTOOLS 和 VS100COMNTOOLS 指向“C:\Users\username\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin”。

我尝试了几种不同的安装方式。我将在下面概述每个。 (所有这些都是从提升的命令提示符运行的。)

  1. 下载源码并编译。

    python setup.py 安装

这给出了输出:

running install
running build
running build_py
running build_ext
building 'pysqlcipher._sqlite' extension
error: Unable to find vcvarsall.bat
  1. 使用 MinGW 编译源代码

由于在安装 VS for Python 后我仍然遇到同样的错误,我决定尝试:

setup.py install build --compiler=mingw32

输出:

running install
running build
running build_py
running build_ext
building 'pysqlcipher._sqlite' extension
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/module.c -o build\temp.win32-2.7\Release\src\module.o
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/connection.c -o build\temp.win32-2.7\Release\src\connection.o
src/connection.c: In function '_pysqlite_final_callback':
src/connection.c:787:15: warning: variable 'aggregate_class' set but not used [-Wunused-but-set-variable]
     PyObject* aggregate_class;
               ^
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/cursor.c -o build\temp.win32-2.7\Release\src\cursor.o
src/cursor.c: In function 'pysqlite_cursor_dealloc':
src/cursor.c:129:9: warning: variable 'rc' set but not used [-Wunused-but-set-variable]
     int rc;
         ^
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/cache.c -o build\temp.win32-2.7\Release\src\cache.o
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/microprotocols.c -o build\temp.win32-2.7\Release\src\microprotocols.o
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/prepare_protocol.c -o build\temp.win32-2.7\Release\src\prepare_protocol.o

D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/statement.c -o build\temp.win32-2.7\Release\src\statement.o
src/statement.c: In function 'pysqlite_statement_dealloc':
src/statement.c:408:9: warning: variable 'rc' set but not used [-Wunused-but-set-variable]
     int rc;
         ^
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/util.c -o build\temp.win32-2.7\Release\src\util.o
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c src/row.c -o build\temp.win32-2.7\Release\src\row.o
D:\Developer\MinGW\bin\gcc.exe -mdll -O -Wall -DMODULE_NAME=\"pysqlcipher.dbapi2\" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABL
E_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Iamalgamation -ID:\Developer\Pyth
on27\include -ID:\Developer\Python27\PC -c amalgamation\sqlite3.c -o build\temp.win32-2.7\Release\amalgamation\sqlite3.o

amalgamation\sqlite3.c:13654:26: fatal error: openssl/rand.h: No such file or directory
 #include <openssl/rand.h>
                          ^
compilation terminated.
error: command 'D:\\Developer\\MinGW\\bin\\gcc.exe' failed with exit status 1
  1. 我安装了 OpenSSL 并再次尝试。还是一样的输出。我还安装了 pyopenssl。还是一样的错误。

  2. 我尝试了简单的方法:

    easy_install pysqlcipher

    pip 安装 pysqlcipher

这些还抱怨找不到 'openssl/rand.h'

有没有人知道如何解决这个问题,以便我可以为 Windows 编译这个包? 谢谢!

【问题讨论】:

    标签: python windows python-2.7


    【解决方案1】:

    这是我遇到的最常见的问题。但我使用pytools for Visual Studio 2012 来解决这个问题。安装 pytools 后,在 New Project 中添加了一个新的项目类别

    选择您的 python 项目。从您的项目解决方案资源管理器中添加 python 环境,右键单击它并选择“添加/删除 Python 环境...”。将出现一个带有复选框选项的窗口,选择您当前的 python 版本(安装在您的系统中)。

    将添加一个环境,如(此处为 Python 2.7)。再次右键单击它并选择“安装 Python 包”选项。

    一个带有 pip 和 easy_install 选项的窗口会上升。现在只需输入您的包名称,例如。 pyopenssl。检查以管理员身份运行。点击确定按钮

    控制台输出确定您的软件包是否安装完美。

    希望对你有帮助。

    【讨论】:

    • 我已经安装了 pyopenssl。我要安装的软件包是 pysqlcipher。谢谢!
    • 其实我试过VS 12来安装包。我认为如果您在“安装 Python 包”文本字段中编写 pysqlcipher,您也可以从 pip 下拉列表中选择 easy_install 选项。
    【解决方案2】:

    方法一

    安装Microsoft Visual C++ Compiler for Python 2.7

    更新点

    python -m pip install -U pip
    

    更新设置工具

    pip install -U setuptools
    

    使用pip安装pysqlcipher

    pip install pysqlcipher
    

    pip 应该能够找到您安装的 Visual C++ 编译器,并编译所需的扩展。

    如果由于某种原因不能使用 pip,请尝试下面的方法 2。


    方法二

    查看您的setup.py 如果它是一个较旧的包,它可能正在导入distutils.core.setup() 而不是setuptools.setup()

    我在 2015 年遇到了这个问题,结合了以下因素:

    1. 来自http://aka.ms/vcpython27的Microsoft Visual C++ Compiler for Python 2.7

    2. 使用distutils.core.setup()的旧包

    3. 尝试使用python setup.py build,而不是使用pip

    如果您使用最新版本的 pip,它将强制 (monkeypatch) 软件包使用 setuptools,即使它的 setup.py 调用 distutils。但是,如果您不使用 pip,而只是在执行 python setup.py build,则构建过程将使用 distutils.core.setup(),它不知道编译器安装位置。

    第一步:安装Microsoft Visual C++ Compiler for Python 2.7

    第 2 步:打开相应的 Visual C++ 2008 命令提示符

    打开开始菜单或开始屏幕,搜索“Visual C++ 2008 32-bit Command Prompt”(如果您的 python 是 32 位)或“Visual C++ 2008 64-bit Command Prompt”(如果您的 python 是 64 -少量)。运行。命令提示符应在标题栏中显示 Visual C++ 2008 ...。

    第三步:设置环境变量

    在刚刚打开的命令提示符中设置这些环境变量。

    SET DISTUTILS_USE_SDK=1
    SET MSSdk=1
    

    参考http://bugs.python.org/issue23246

    第 4 步:构建和安装

    cd 到你要构建的包,然后运行python setup.py build,然后运行python setup.py install。如果要安装到 virtualenv,请在构建之前激活它。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 2013-12-25
      • 2016-06-12
      • 2016-07-06
      • 2013-06-22
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多