mirror of
https://github.com/capstone-engine/capstone.git
synced 2024-11-28 16:00:39 +00:00
b446327f3b
When the python bindings are installed using the new wheels infrastructure, data_files are relative to the site-packages directory even if using absolute paths. The following example demonstrates the bug fixed by this commit: (ran on archlinux) ```bash $ pip install wheel # if this package is installed, wheel installation is made the default Collecting wheel Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB) 100% |################################| 71kB 124kB/s Installing collected packages: wheel Successfully installed wheel-0.29.0 $ pip install capstone # this will use the wheel installation method now Collecting capstone Using cached capstone-3.0.4.tar.gz Building wheels for collected packages: capstone Running setup.py bdist_wheel for capstone ... done Stored in directory: /root/.cache/pip/wheels/7c/d1/d0/db6e2c5ef1063aabb9de2dd8b92b4c27ee6f9fd213240099b8 Successfully built capstone Installing collected packages: capstone Successfully installed capstone-3.0.4 $ find /usr/lib/ -name "libcapstone.so" /usr/lib/python3.5/site-packages/usr/lib/python3.5/site-packages/capstone/libcapstone.so ``` So the path `SITE_PACKAGES` in the `data_files` specification of the setup.py file was interpreted relative to the python site-packages directory. The fix for this is simple: use `/capstone` instead of an absolute path for `SITE_PACKAGES`. |
||
---|---|---|
.. | ||
capstone | ||
prebuilt | ||
pyx | ||
.gitignore | ||
LICENSE.TXT | ||
Makefile | ||
MANIFEST.in | ||
PKG-INFO.src | ||
PKG-INFO.win | ||
README.pypi-src | ||
README.pypi-win | ||
README.TXT | ||
setup_cython.py | ||
setup.py | ||
test_all.py | ||
test_arm64.py | ||
test_arm.py | ||
test_basic.py | ||
test_customized_mnem.py | ||
test_detail.py | ||
test_lite.py | ||
test_m68k.py | ||
test_mips.py | ||
test_ppc.py | ||
test_skipdata.py | ||
test_sparc.py | ||
test_systemz.py | ||
test_x86.py | ||
test_xcore.py | ||
xprint.py |
0. This documentation explains how to install Python binding for Capstone from source. If you want to install it from PyPi package, see the below docs instead: - README.pypi-src: How to compile the Capstone core & install binding at the same time from PyPi package "capstone" - README.pypi-win: How to install binding for Windows from PyPi package "capstone-windows". Note that this package already has prebuilt core inside, so no compilation is needed. 1. To install pure Python binding on *nix, run the command below: $ sudo make install To install Python3 binding package, run the command below: (Note: this requires python3 installed in your machine) $ sudo make install3 2. For better Python performance, install cython-based binding with: $ sudo make install_cython Note that this requires cython installed in your machine first. To install cython, see section 3 below. 3. To install cython, you have to ensure that the header files and the static library for Python are installed beforehand. E.g. on Ubuntu, do: $ sudo apt-get install python-dev Depending on if you already have pip or easy_install installed, install cython with either: $ sudo pip install cython or: $ sudo easy_install cython NOTE: Depending on your distribution you might also be able to install the required cython version using your repository. E.g. on Ubuntu, do: $ sudo apt-get install cython However, our cython-based binding requires cython version 0.19 or newer, but sometimes distributions only provide older version. Make sure to verify the current installed version before going into section 2 above. E.g, on Ubuntu, you can verify the current cython version with: $ apt-cache policy cython Which should at least print version 0.19 This directory contains some test code to show how to use Capstone API. - test_basic.py This code shows the most simple form of API where we only want to get basic information out of disassembled instruction, such as address, mnemonic and operand string. - test_lite.py Similarly to test_basic.py, but this code shows how to use disasm_lite(), a lighter method to disassemble binary. Unlike disasm() API (used by test_basic.py), which returns CsInsn objects, this API just returns tuples of (address, size, mnemonic, op_str). The main reason for using this API is better performance: disasm_lite() is at least 20% faster than disasm(). Memory usage is also less. So if you just need basic information out of disassembler, use disasm_lite() instead of disasm(). - test_detail.py: This code shows how to access to architecture-neutral information in disassembled instructions, such as implicit registers read/written, or groups of instructions that this instruction belong to. - test_<arch>.py These code show how to access architecture-specific information for each architecture. 2. To install Python binding on Windows: Recommended method: Use the Python module installer for 32/64 bit Windows from: http://www.capstone-engine.org/download.html Manual method: If the module installer fails to locate your Python install, or if you have additional Python installs (e.g. Anaconda / virtualenv), run the following command in command prompt: C:\> C:\location_to_python\python.exe setup.py install Next, copy capstone.dll from the 'Core engine for Windows' package available on the same Capstone download page and paste it in the path: C:\location_to_python\Lib\site-packages\capstone\