mardi 3 mai 2016

Fatal error C1083 trying to build PysqlCipher on Windows 7

After lots of trial and error, I was able to compile sqlcipher and create sqlcipher.exe. I can launch it from cmd.exe, pass the PRAGMA key and create and encrypted database. I even did a hexdump to make sure it was really working.

My next goal was to build pysqlcipher in an Anaconda virtualenv so I could work with an encrypted sqlite db in a python app I'm developing. After unzipping the pysqlcipher source, I ran the below build command:

C:\Users\nicholjf\Downloads\pysqlcipher>python setup.py build_sqlcipher --libraries=sqlcipher --include-dirs=C:\MinGW\mysys\1.0\local\include\sqlcipher --library-dirs=C:\MinGW\msys\1.0\local\lib

As you can see, I explicitly reference the "lib" and "include" directories where the required sqlite/sqlcipher files live. For some reason, Visual C++ cannot see my sqlite.h file. Here's the verbose output from the above command:

options (after parsing config files):
options (after parsing command line):
option dict for 'aliases' command:
  {}
option dict for 'build_ext' command:
  {}
option dict for 'build_sqlcipher' command:
  {'include_dirs': ('command line',
                    'C:\\MinGW\\mysys\\1.0\\local\\include\\sqlcipher'),
   'libraries': ('command line', 'sqlcipher'),
   'library_dirs': ('command line', 'C:\\MinGW\\msys\\1.0\\local\\lib')}
running build_sqlcipher
Distribution.get_command_obj(): creating 'build_sqlcipher' command object
  setting options for 'LibSQLCipherBuilder' command:
    libraries = sqlcipher (from command line)
    library_dirs = C:\MinGW\msys\1.0\local\lib (from command line)
    include_dirs = C:\MinGW\mysys\1.0\local\include\sqlcipher (from command line)
Distribution.get_command_obj(): creating 'build' command object
building 'pysqlcipher._sqlite' extension
creating build
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release
creating build\temp.win-amd64-2.7\Release\src
C:\Users\nicholjf\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DMODULE_NAME=\"pysqlcipher.dbapi2\" -IC:\MinGW\mysys\1.0\local\include\sqlcipher -IC:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\include
 -IC:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\PC /Tcsrc/module.c /Fobuild\temp.win-amd64-2.7\Release\src/module.obj -I/usr/include/sqlcipher/
module.c
c:\users\nicholjf\downloads\pysqlcipher\src\connection.h(33) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory
Traceback (most recent call last):
  File "setup.py", line 394, in <module>
    main()
  File "setup.py", line 391, in main
    setuptools.setup(**get_setup_args())
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\core.py", line 151, in setup
    dist.run_commands()
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\command\build_ext.py", line 339, in run
    self.build_extensions()
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\command\build_ext.py", line 448, in build_extensions
    self.build_extension(ext)
  File "setup.py", line 156, in build_extension
    build_ext.build_extension(self, ext)
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\command\build_ext.py", line 498, in build_extension
    depends=ext.depends)
  File "C:\Users\nicholjf\AppData\Local\Continuum\Anaconda3\envs\crestcrawl\lib\distutils\msvc9compiler.py", line 548, in compile
    raise CompileError(msg)
distutils.errors.CompileError: command ['"C:\\Users\\nicholjf\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\cl.exe"', '/c', '/nologo', '/Ox', '/MD', '/W3', '/GS-', '/DNDEBUG', '-DMODULE_NAME=\\"pysqlcipher.dbapi2\\"', '-IC:\\MinGW\\mysys\\1.0\\local\\inclu
de\\sqlcipher', '-IC:\\Users\\nicholjf\\AppData\\Local\\Continuum\\Anaconda3\\envs\\crestcrawl\\include', '-IC:\\Users\\nicholjf\\AppData\\Local\\Continuum\\Anaconda3\\envs\\crestcrawl\\PC', '/Tcsrc/module.c', '/Fobuild\\temp.win-amd64-2.7\\Release\\src/module.obj', '-I/usr/include/sqlcipher/'] fail
ed with exit status 2

Any help or advice you can give on how to finish up this Pysqlcipher build/install would be very much appreciated. If you have any questions or would like to see any other data, please let me know and I will update the question.

1 commentaire:

  1. I must say that the openssl is that bad but is that useful,so trouble for python,php,c#

    RépondreSupprimer