Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install m2crypto failed in Windows 10 with Python 3.7 #25

Closed
mobilEKG opened this issue Jan 15, 2020 · 6 comments
Closed

Install m2crypto failed in Windows 10 with Python 3.7 #25

mobilEKG opened this issue Jan 15, 2020 · 6 comments

Comments

@mobilEKG
Copy link

Try to install the requirements:

pip install -r requirements.txt

Get the following error:

...
  _m2crypto_wrap.c
  SWIG/_m2crypto_wrap.c(3561): fatal error C1083: Cannot open include file: 'openssl/err.h': No such file or directory
  error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.24.28314\\bin\\HostX86\\x64\\cl.exe' failed with exit status
 2
...
```
Any hint?
@tech234a
Copy link
Contributor

I was able to get m2crypto installed and working in Python 2.7 on Windows 10 by first running pip install wheel. I have not gotten it working on Python 3.8.1 so far.

@tech234a
Copy link
Contributor

Some builds for m2crypto for specific versions of Python are available from their CI: https://ci.appveyor.com/project/m2crypto/m2crypto/history. Try selecting a version, selecting a job that matches your Python version, then going to the "Artifacts" tab and downloading an installer. To install a .whl file, see step 11 of my build tutorial below.

I have also attached the m2crypto module that I have built on Windows 10 x64, Python 3.8.1. It should work on any x64-based version of Windows with any version of Python 3.8.X. M2Crypto-0.35.2.win-amd64-py3.8.zip

However, if you are unable to find a build that matches your Python version and system type and architecture, you may need to manually build m2crypto. I adapted the build steps from their CI build scripts: https://gitlab.com/m2crypto/m2crypto/blob/master/appveyor.yml. I built the module by doing the following:

  1. Install the latest Build Tools for Visual Studio 2019. See https://visualstudio.microsoft.com/downloads/ under "All Downloads" -> "Tools for Visual Studio 2019". This direct link was active as of this writing: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
  2. In the installer, select "C++ Build Tools", install, and reboot if necessary.
  3. Install the latest full (not Light) OpenSSL for your architecture (Win64/Win32). Current version as of this writing is 1.1.1d. Make note of the directory to which you install OpenSSL. https://slproweb.com/products/Win32OpenSSL.html
  4. In PowerShell, install the Chocolatey package manager. I used this command from their website: Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  5. Install swig with Chocolatey (in PowerShell). choco install -r -y swig
  6. Install the pywin32 dependency. Run pip install pywin32. If you have problems, try first running pip install wheel. To get pip to target a specific Python installation, try launching it using py -[version] -m pip install [module]. Note: you may need to use an elevated (administrator) PowerShell to install Python modules.
  7. Get the latest m2crypto code. If you have git installed, run git clone https://gitlab.com/m2crypto/m2crypto. Otherwise, download and extract the code from GitLab: https://gitlab.com/m2crypto/m2crypto/-/archive/master/m2crypto-master.zip
  8. Use cd to change into the directory m2crypto was cloned/extracted to.
  9. Assuming python launches your desired Python interpreter version, run python setup.py build --openssl="C:\Program Files\OpenSSL-Win64" --bundledlls, replacing C:\Program Files\OpenSSL-Win64 with the directory to which you installed OpenSSL. (On some systems you can use the py launcher to specify a Python version to use, run py -h for more information.)
  10. Generate the installable files. python.exe setup.py bdist_wheel bdist_wininst bdist_msi.
  11. Install the module. cd into the dist directory and run pip install M2Crypto-0.35.2-cp38-cp38-win_amd64.whl, replacing the filename with the generated .whl file. If you have problems, try first running pip install wheel. To get pip to target a specific Python installation, try launching it using py -[version] -m pip install [module]. Alternatively, you can run the generated .exe or .msi installer. Note: you may need to use an elevated (administrator) PowerShell to install Python modules.

@mobilEKG
Copy link
Author

Follow the upper instruction, it works like a charm! Thank you tech234a!

@cperezabo
Copy link

Hi, I've created this repo with pre-compiled wheels so you don't have to do all the steps, just download the .whl and install it!

@warifp
Copy link

warifp commented Feb 4, 2022

I was able to get m2crypto installed and working in Python 2.7 on Windows 10 by first running pip install wheel. I have not gotten it working on Python 3.8.1 so far.

Thankyou !

@tonirojas
Copy link

I failed at step 9 of [tech234a] instructions, always having the same error:
...
running build
running build_py
running egg_info
writing src\M2Crypto.egg-info\PKG-INFO
writing dependency_links to src\M2Crypto.egg-info\dependency_links.txt
writing top-level names to src\M2Crypto.egg-info\top_level.txt
error: Could not find module 'libssl.so' (or one of its dependencies). Try using the full path with constructor syntax.
...

any hint?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants