path (aka path pie, formerly path.py) implements path objects as first-class entities, allowing common operations on files to be invoked on those path objects directly. For example:
from path import Path
d = Path("/home/guido/bin")
for f in d.files("*.py"):
f.chmod(0o755)
# Globbing
for f in d.files("*.py"):
f.chmod("u+rwx")
# Changing the working directory:
with Path("somewhere"):
# cwd in now `somewhere`
...
# Concatenate paths with /
foo_txt = Path("bar") / "foo.txt"
Path pie is hosted at Github.
Find the documentation here.
Guides and Testimonials
Yasoob wrote the Python 101 Writing a Cleanup Script based on path.
Advantages
Python 3.4 introduced pathlib, which shares many characteristics with path. In particular, it provides an object encapsulation for representing filesystem paths. One may have imagined pathlib would supersede path.
But the implementation and the usage quickly diverge, and path has several advantages over pathlib:
pathimplementsPathobjects as a subclass ofstr, and as a result thesePathobjects may be passed directly to other APIs that expect simple text representations of paths, whereas withpathlib, one must first cast values to strings before passing them to APIs unaware ofpathlib. This shortcoming was addressed by PEP 519, in Python 3.6.pathgoes beyond exposing basic functionality of a path and exposes commonly-used behaviors on a path, providing methods likermtree(from shlib) andremove_p(remove a file if it exists).- As a PyPI-hosted package,
pathis free to iterate faster than a stdlib package. Contributions are welcome and encouraged. pathprovides a uniform abstraction over its Path object, freeing the implementer to subclass it readily. One cannot subclass apathlib.Pathto add functionality, but must subclassPath,PosixPath, andWindowsPath, even if one only wishes to add a__dict__to the subclass instances.pathinstead allows thePath.moduleobject to be overridden by subclasses, defaulting to theos.path. Even advanced uses ofpath.Paththat subclass the model do not need to be concerned with OS-specific nuances.
Alternatives
In addition to pathlib, the pylib project implements a LocalPath class, which shares some behaviors and interfaces with path.
Development
To install a development version, use the Github links to clone or download a snapshot of the latest code. Alternatively, if you have git installed, you may be able to use pip to install directly from the repository:
pip install git+https://github.com/jaraco/path.git
Testing
Tests are invoked with tox. After having installed tox, simply invoke tox in a checkout of the repo to invoke the tests.
Tests are also run in continuous integration. See the badges above for links to the CI runs.
Releasing
Tagged releases are automatically published to PyPI by Azure Pipelines, assuming the tests pass.
Origins
The path.py project was initially released in 2003 by Jason Orendorff and has been continuously developed and supported by several maintainers over the years.
For Enterprise
Available as part of the Tidelift Subscription.
This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
Security Contact
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
