CrySPR is a modular Python package, which includes three main submodules: calculators, optimization, and utils. Figure demonstrates the workflow for the CSP task in CrySPR, users are allowed to input several constraints for search space, including chemical formula, the number of formulae per conventional unit cell (Z), space groups (SPG), and some extra constraints including the number of sample structures per SPG for each Z, and Wyckoff positions, etc. The input information then is then processed by CrySPR then used by PyXtal to generate initial unrelaxed crystal structures, which subsequently encounter local structure optimization using a local optimization algorithm and ML-IAP in the ASE framework, from which the final total energies (E) are determined. The package has a built-in function for a developed stepwise strategy. It is specially designed for ML-IAPs and includes two fully symmetry-compliant steps for structure relaxation with an improved accuracy: firstly cell-fixed relaxation and subsequently cell-varying relaxation. The package can easily adopt any ML-IAP that is formulated in the form of ASE calculator class. CrySPR is expandable with more features and functionalities as it evolves, e.g., adapting more advanced and accurate ML-IAPs, comprehensive static reference data of the potential energies, optimization algorithms for efficient PES sampling, and multi-objective oriented CSP, etc.