Natural samples are characterized by surface roughness which is intrinsically multi-scale as depicted by the well known concept of fractal dimension. Nevertheless, surface asperities are barely taken into account in simulations and modeling where flat surfaces and sharp corners or edges are generally preferred for the sake of simplicity. In this context, we propose here a versatile Python program called Pyrough that aims at building virtual samples characterized by configurable surface roughness for numerical applications such as atomistic and finite-element simulations. The program is open source and relies on the classical roughness theory that integrates the concept of self-affine surface. Several basic shapes including basic blocks, spheres, grains and wires with self-affine surface asperities are implemented and the object-oriented structure of the program simplifies the implementation of more complex objects. Virtual sample design is improved using Pyrough, which enables more realistic simulations to be made. Several application examples including e.g., the design of wavy grain boundaries or nanoindentation testing using a roughened indenter tip are presented. Program summaryProgram Title: PyroughCPC Library link to program files:https://doi.org/10.17632/x7jdtrbf4s.1Developer's repository link:https://github.com/jamodeo12/PyroughLicensing provisions: GNU General Public License 3Programming language: PythonExternal routines/libraries: Gmsh, Meshio, Wulffpack, ASE, Atomsk, cv2Nature of problem: 3D virtual samples used for atomistic or finite-element simulations generally rely on simplified geometries and surfaces for the sake of design simplicity. However, the influence of surface roughness play a crucial role in various fields of applications (e.g., mechanics, catalysis, lubrication) and must be taken into account.Solution method: Pyrough allows for the design of 3D virtual objects with rough surfaces by means of the classical roughness theory. The user can easily tune the morphology of surfaces and shape 3D objects. Output samples can be used in finite-element or atomistic simulations according to the user's needs.Additional comments including restrictions and unusual features: The program documentation is available at https://jamodeo12.github.io/Pyrough/