如何在Windows7上编译和安装pysqlcipher for Python2.7

2024-04-20 07:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在Windows7上安装了Python2.7。在我的测试过程中,我还为python、MinGW、Visual C++ for Python和OpenSSL安装了setuptools和pip。在我的%PATH %中都有条目,并且我有环境变量VS90CuMoToots和VS100CuNoToots指向“C:\Usvs\UrrEs\AppDAT\\Studio \程序\通用\微软\ Visual C++,用于Python \\\\VC\bin”。在

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

  1. 下载源代码并编译。在

    Python设置.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之后,我还是遇到了同样的错误,所以我决定尝试:

^{pr2}$

输出:

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. 我试着用简单的方法:

    轻松安装pysqlcipher

    pip安装pysqlcipher

它们还抱怨找不到“openssl/rand.h”

有没有人知道如何解决这个问题,这样我就可以编译这个Windows软件包了? 谢谢!在


Tags: buildsrciddeveloperbinincludeenableexe
2条回答

这是我所面临的最常见的问题。但我用pytools for Visual Studio 2012来解决这个问题。安装pytools后,新项目类别将添加到新项目enter image description here

选择您的python项目。从projectsolutionexplorer中添加python环境,右键单击它并选择“Add/removepythonenvironment…”。将出现一个带有复选框选项的窗口,选择您当前的python版本(安装在您的系统中)。在

enter image description here

将添加一个环境,如下所示(这里是python2.7)。再次右键单击它并选择“installpython Package”选项。 enter image description here

一个窗口是上升与pip和容易安装选项。现在只需键入您的包名,例如pyopenssl。选中“以管理员身份运行”。单击“确定”按钮

enter image description here

enter image description here

控制台输出决定您的软件包是否安装完好。在

我希望这对你有帮助。在

方法1

安装Microsoft Visual C++ Compiler for Python 2.7

更新pip

python -m pip install -U pip

更新设置工具

^{pr2}$

使用pip安装pysqlcipher

pip install pysqlcipher

^ {CD1>}应该能够找到VisualC++编译器的安装,并编译所需的扩展。在

如果由于某种原因你不能使用pip,那么试试下面的方法2。在


方法2

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

在2015年,我遇到了这些因素:

    < > > Python 2.7的微软Visual C++编译器,从^ {A2}

  1. 使用distutils.core.setup()

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

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

步骤1:安装Microsoft Visual C++ Compiler for Python 2.7

<强>步骤2:打开相应的Visual C++ 2008命令提示

<打开开始菜单或启动屏幕,搜索“Visual C++ 2008 32位命令提示符”(如果你的Python是32位)或“Visual C++ 2008位64位命令提示符”(如果你的Python是64位)。跑吧。命令提示应该说Visual C++ 2008…在标题栏中。在

第3步:设置环境变量

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

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

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

第4步:构建和安装

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

相关问题 更多 >