{"id":1020,"library":"python-pptx","title":"python-pptx","description":"python-pptx is a Python library for creating, reading, and updating PowerPoint (.pptx) files. A typical use would be generating a PowerPoint presentation from dynamic content such as a database query, analytics output, or a JSON payload. It is currently at version 1.0.2 and aims for industrial-grade reliability with a comprehensive testing regimen.","status":"active","version":"1.0.2","language":"python","source_language":"en","source_url":"https://github.com/scanny/python-pptx","tags":["powerpoint","office","pptx","presentation","document-generation"],"install":[{"cmd":"pip install python-pptx","lang":"bash","label":"Install stable version"}],"dependencies":[{"reason":"Required for parsing and generating Open XML files.","package":"lxml"},{"reason":"Required for image manipulation.","package":"Pillow"},{"reason":"Required for advanced charting features.","package":"XlsxWriter","optional":true}],"imports":[{"symbol":"Presentation","correct":"from pptx import Presentation"},{"symbol":"Inches","correct":"from pptx.util import Inches"}],"quickstart":{"code":"from pptx import Presentation\nfrom pptx.util import Inches\n\n# Create a new presentation\nprs = Presentation()\n\n# Add a title slide (layout index 0)\ntitle_slide_layout = prs.slide_layouts[0]\nslide = prs.slides.add_slide(title_slide_layout)\n\n# Set title and subtitle\ntitle = slide.shapes.title\nsubtitle = slide.placeholders[1]\ntitle.text = \"Hello, World!\"\nsubtitle.text = \"python-pptx was here!\"\n\n# Add a blank slide (layout index 6) and add a textbox\nblank_slide_layout = prs.slide_layouts[6]\nslide = prs.slides.add_slide(blank_slide_layout)\nleft = top = width = height = Inches(1.0)\ntextbox = slide.shapes.add_textbox(left, top, width, height)\ntextbox.text = \"This is a custom textbox.\"\n\n# Save the presentation\nprs.save('test.pptx')\nprint(\"Presentation 'test.pptx' created successfully.\")","lang":"python","description":"This example demonstrates how to create a new PowerPoint presentation, add a title slide with text, and then add a blank slide with a custom textbox."},"warnings":[{"fix":"Consult the release notes and official documentation for specific migration paths. Update code to use new enumeration paths and property names. Handle `\\v` for line breaks when parsing or generating text.","message":"Several API changes occurred around versions 0.6.x to 1.0.x, including enumeration renames (e.g., `pptx.enum.MSO_COLOR_TYPE` moved to `pptx.enum.dml.MSO_COLOR_TYPE`) and property renames (e.g., `SlideLayout.slidemaster` to `SlideLayout.slide_master`). Additionally, line-break encoding in `.text` properties changed from newline (\\n) to vertical-tab (\\v) in version 0.6.18 to better distinguish from paragraph boundaries.","severity":"breaking","affected_versions":"0.6.1 and later, 0.6.18 and later"},{"fix":"Ensure all input files are in the `.pptx` format. Convert older `.ppt` files using Microsoft PowerPoint if necessary.","message":"The library exclusively supports PowerPoint Open XML files (`.pptx` format, introduced with PowerPoint 2007). Older PowerPoint `.ppt` files (PowerPoint 2003 and earlier) are not supported.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Implement explicit checks or user confirmation mechanisms in your application before saving to an existing file path, or ensure unique filenames are generated.","message":"When saving a presentation, if you specify a filename that already exists, `python-pptx` will overwrite the file silently without any warning or prompt.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always use `prs = Presentation()` or `prs = Presentation('path/to/file.pptx')`.","message":"Avoid directly instantiating internal classes (e.g., `pptx.presentation.Presentation`). Instead, use the `pptx.Presentation()` factory function to create a new presentation or load an existing one.","severity":"gotcha","affected_versions":"All versions"},{"fix":"If charting features are used and issues arise, explicitly install `XlsxWriter`: `pip install XlsxWriter`.","message":"While `pip install python-pptx` typically handles core dependencies, if you use the `setup.py` installation method, or encounter issues with charting, verify that `XlsxWriter` is installed, as it is required for charting features.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T22:41:09.354Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Use `import pptx` or `from pptx import Presentation` to import the library.","cause":"The python-pptx library is installed via `pip install python-pptx` but its core package name for importing is `pptx`.","error":"ModuleNotFoundError: No module named 'pptx'"},{"fix":"Access the `add_slide` method through the `slides` collection: `slide_layout = prs.slide_layouts[0]\nslide = prs.slides.add_slide(slide_layout)`","cause":"The `add_slide` method is called directly on the `Presentation` object instead of its `slides` collection.","error":"AttributeError: 'Presentation' object has no attribute 'add_slide'"},{"fix":"Use a valid `builtin_chart_type` enum member from `pptx.enum.chart`, for example: `XL_CHART_TYPE.COLUMN_CLUSTERED`.","cause":"An invalid or misspelled chart type is provided when attempting to add a chart to a slide.","error":"KeyError: 'chart_type'"},{"fix":"Ensure the file exists and the path (absolute or relative) is correct, for example: `prs = Presentation('path/to/your/template.pptx')`.","cause":"The specified path to the presentation file (for loading or saving) is incorrect, or the file does not exist at that location.","error":"FileNotFoundError: [Errno 2] No such file or directory: 'template.pptx'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"1.0.2","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.33,"mem_mb":11.4,"disk_size":"53.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.36,"mem_mb":11.4,"disk_size":"53.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":3.1,"import_time_s":0.25,"mem_mb":11.4,"disk_size":"55M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.24,"mem_mb":11.4,"disk_size":"55M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":12.8,"disk_size":"56.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.8,"mem_mb":12.8,"disk_size":"56.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.8,"import_time_s":0.47,"mem_mb":12.8,"disk_size":"58M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.48,"mem_mb":12.8,"disk_size":"58M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.39,"mem_mb":12.7,"disk_size":"48.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.51,"mem_mb":12.7,"disk_size":"48.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.6,"import_time_s":0.42,"mem_mb":12.7,"disk_size":"50M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.44,"mem_mb":12.7,"disk_size":"50M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.39,"mem_mb":13.4,"disk_size":"48.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.43,"mem_mb":13.4,"disk_size":"48.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.6,"import_time_s":0.39,"mem_mb":13.4,"disk_size":"49M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.43,"mem_mb":13.4,"disk_size":"49M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":12.1,"disk_size":"51.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.36,"mem_mb":12.1,"disk_size":"51.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":3.6,"import_time_s":0.33,"mem_mb":12.1,"disk_size":"52M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":12.1,"disk_size":"52M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}