Installation of PyMad is different depending on which underlying modules you want.
For JPyMad, you first need JMad which you can obtain here Then, download the source, and in pymad/src, run the command
python setup.py install --install-platlib
The argument –install-platlib means we exclude external modules. The reason is that the external module cern.madx requires the dynamic library of Mad-X available on your system (which we here assume you do not have)
We provide an installation script which should do the full job for you. Download the script and run it. It will take a few minutes to finish. Upon successful completion, it will create an uninstall.sh script which you should keep somewhere. This script knows all the files you have installed, and will remove all files if you execute it (folders are not removed).
Dependencies: cmake, compilers for c/fortran, python 2.6 or 2.7
Second method, source script:
For CPymad on a 64 bit Linux machine with afs available, it is enough to source the script that we currently provide in
/afs/cern.ch/user/y/ylevinse/public/setupCPYMAD.shWe hope to in the near future provide a tarball for Linux and OSX containing all needed files.
Third method, manual installation:
If you download JMad after following any of the methods described above for CPyMad, you will immediately have JPyMad available as well.
At this time you have to build pymad manually.
If you want to install all system dependencies at once, I recommend Python(x,y). This is a python development distribution including MinGW, Cython and Python2.7. Make sure Cython and MinGW are marked for installation.
Download the Mad-X source from svn and unpack it.
Build the Mad-X library as a shared library (.dll). Enter the folder madX and run the commands
mkdir build && cd build cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_INSTALL_PREFIX=..\madx-redist ..\ make installThis will install the headers, binaries and library files to the folder ..\madx-redist.
Executing CMake from the GUI, you have to add the BUILD_SHARED_LIBS option manually. Afterwards reconfigure and regenerate.
Alternatively, if you have already built a static library you can convert it to a dynamic library using pexports and dlltool like so:
mingw-get install mingw32-pexports ar -x libptc.a gcc -shared *.obj -o libptc.dll -lgfortran pexports libptc.dll >libptc.def dlltool --dllname libptc.dll --def libptc.def --output-lib libptc.dll.a del *.obj libptc.def ar -x libmadx.a gcc -shared *.obj -o libmadx.dll -L. -lptc.dll -lstdc++ -lgfortran pexports libmadx.dll >libmadx.def dlltool --dllname libmadx.dll --def libmadx.def --output-lib libmadx.dll.a del *.obj libmadx.defIn the folder pymad/src, run the command
python setup.py install --madxdir=<path-to-your>\madx-redistIt is highly unlikely that your build succeeds at this point. See Potential problems for further information.
Copy the .dll library files to either your system or better your applications runtime path.
In the following we will try to keep a list of the various issues users have reported during installation.
libmadx.so not found:
from cern.madx import madx ImportError: libmadx.so: cannot open shared object file: No such file or directorySolution: Though we try to set the runtime path during compilation, it doesn’t always work. Please set the LD_LIBRARY_PATH in your environment. Example, if libmadx.so is installed in $HOME/.local/lib, and you use bash, add to $HOME/.bashrc:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.local/lib/Please note, on OSX you might need to use the variable DYLD_LIBRARY_PATH instead of LD_LIBRARY_PATH. The authors are not very familiar with OSX, but know of at least one occurence where that was the problem.
Cython.Distutils not found:
Traceback (most recent call last): File "setup.py", line 22, in <module> from Cython.Distutils import build_ext ImportError: No module named Cython.DistutilsSolution: In order to get cpymad, you need Cython installed on your system. If you cannot obtain that, use jpymad instead.
Cannot find find -lpthread:
Occurs: When linking libmadx with the -DMADX_STATIC:BOOL=ON cmake option specified.
Reason: A static version of pthreads is not installed by default.
Solution: Download a prebuilt version of the library. You need the file libpthreadGC2.a. Copy it to C:\MinGW32-xy\lib\libpthread.a.
Unable to find vcvarsall.bat:
Occurs: While building python setup.py install.
Reason: distutils is not configured to use MinGW.
Solution: Add the following lines to C:\Python27\Lib\distutils\distutils.cfg
[build] compiler=mingw32If you do not want to modify your python system configuration you can place this as setup.cfg in the current directory. You can also specify the compiler on the command line:
python setup.py build --madxdir=<path-to-your>\madx-redist --compiler=mingw32 python setup.py install --madxdir=<path-to-your>\madx-redistSee also this question on stackoverflow.
distutils.unixcompiler not configured:
Traceback (most recent call last): ... File "C:\Python27\lib\distutils\unixccompiler.py", line 227, in runtime_library_dir_option compiler = os.path.basename(sysconfig.get_config_var("CC")) File "C:\Python27\lib\ntpath.py", line 198, in basename return split(p)[1] File "C:\Python27\lib\ntpath.py", line 170, in split d, p = splitdrive(p) File "C:\Python27\lib\ntpath.py", line 125, in splitdrive if p[1:2] == ':': TypeError: 'NoneType' object has no attribute '__getitem__'Occurs: While building python setup.py install.
Reason: Bug in distutils (?).
Solution: Add the following line to the function _init_nt() in the file Lib\distutils\sysconfig.py of the python installation.
For further reference see a related issue.