History¶
11.5.1¶
- Minor packaging refresh.
11.5.0¶
- #156: Re-wrote the handling of pattern matches for
listdir,walk, and related methods, allowing the pattern to be a more complex object. This approach drastically simplifies the code and obviates theCaseInsensitivePatternandFastPathclasses. Now the mainPathclass should be as performant asFastPathand case-insensitive matches can be readily constructed using the newpath.matchers.CaseInsensitiveclass.
11.4.0¶
- #130: Path.py now supports non-decodable filenames on
Linux and Python 2, leveraging the
backports.os
package (as an optional dependency). Currently, only
listdiris patched, but otherosprimitives may be patched similarly in thepatch_for_linux_python2function. - #141: For merge_tree, instead of relying on the deprecated
distutils module, implement merge_tree explicitly. The
updateparameter is deprecated, instead superseded by acopy_functionparameter and anonly_newerwrapper for any copy function.
11.3.0¶
- #151: No longer use two techniques for splitting lines. Instead, unconditionally rely on io.open for universal newlines support and always use splitlines.
11.2.0¶
- #146: Rely on importlib_metadata instead of
setuptools/pkg_resources to load the version of the module.
Added tests ensuring a <100ms import time for the
pathmodule. This change adds an explicit dependency on the importlib_metadata package, but the project still supports copying of thepath.pymodule without any dependencies.
11.1.0¶
- #143, #144: Add iglob method.
- #142, #145: Rename
tempdirtoTempDirand declare it as part of__all__. Retaintempdirfor compatibility for now. - #145:
TempDir.__enter__no longer returns theTempDirinstance, but instead returns aPathinstance, suitable for entering to change the current working directory.
11.0¶
- Drop support for Python 3.3.
10.6¶
Renamed
namebasetostemto match API of pathlib. Keptnamebaseas a deprecated alias for compatibility.Added new
with_suffixmethod, useful for renaming the extension on a Path:orig = Path('mydir/mypath.bat') renamed = orig.rename(orig.with_suffix('.cmd'))
10.5¶
- Packaging refresh and readme updates.
10.3¶
#115: Added a new performance-optimized implementation for listdir operations, optimizing
listdir,walk,walkfiles,walkdirs, andfnmatch, presented as theFastPathclass.Please direct feedback on this implementation to the ticket, especially if the performance benefits justify it replacing the default
Pathclass.
10.2¶
- Symlink no longer requires the
newlinkparameter and will default to the basename of the target in the current working directory.
10.0¶
- Once again as in 8.0 remove deprecated
path.path.
9.1¶
9.0¶
- Drop support for Python 2.6 and 3.2 as integration dependencies (pip) no longer support these versions.
8.3¶
- Merge with latest skeleton, adding badges and test runs by default under tox instead of pytest-runner.
- Documentation is no longer hosted with PyPI.
8.2¶
- Refreshed project metadata based on jaraco’s project skeleton.
- Releases are now automatically published via Travis-CI.
- #111: More aggressively trap errors when importing
pkg_resources.
8.1.2¶
- #105: By using unicode literals, avoid errors rendering the backslash in __get_owner_windows.
8.0¶
Removed path.path. Clients must now refer to the canonical
name, path.Path as introduced in 6.2.
7.7¶
#88: Added support for resolving certain directories on a system to platform-friendly locations using the appdirs library. The
Path.specialmethod returns anSpecialResolverinstance that will resolve a path in a scope (i.e. ‘site’ or ‘user’) and class (i.e. ‘config’, ‘cache’, ‘data’). For example, to create a config directory for “My App”:config_dir = Path.special("My App").user.config.makedirs_p()
config_dirwill exist in a user context and will be in a suitable platform-friendly location.As
path.pydoes not currently have any dependencies, and to retain that expectation for a compatible upgrade path,appdirsmust be installed to avoid an ImportError when invokingspecial.#88: In order to support “multipath” results, where multiple paths are returned in a single,
os.pathsep-separated string, a new class MultiPath now represents those special results. This functionality is experimental and may change. Feedback is invited.
7.6.2¶
- Re-release of 7.6.1 without unintended feature.
7.6¶
- #100: Add
merge_treemethod for merging two existing directory trees. - Uses setuptools_scm for version management.
7.4¶
7.2¶
- In chmod, added support for multiple symbolic masks (separated by commas).
- In chmod, fixed issue in setting of symbolic mask with ‘=’ where unreferenced permissions were cleared.
7.0¶
- The
openmethod now usesio.openand supports all of the parameters to that function.openwill always raise anOSErroron failure, even on Python 2.- Updated
write_textto support additional newline patterns.- The
textmethod now always returns text (never bytes), and thus requires an encoding parameter be supplied if the default encoding is not sufficient to decode the content of the file.
6.2¶
pathclass renamed toPath. Thepathname remains as an alias for compatibility.
6.1¶
chownnow accepts names in addition to numeric IDs.
6.0¶
- Drop support for Python 2.5. Python 2.6 or later required.
- Installation now requires setuptools.
5.3¶
5.2¶
- #61: path.listdir now decodes filenames from os.listdir when loading characters from a file. On Python 3, the behavior is unchanged. On Python 2, the behavior will now mimick that of Python 3, attempting to decode all filenames and paths using the encoding indicated by
sys.getfilesystemencoding(), and escaping any undecodable characters using the ‘surrogateescape’ handler.
5.0¶
path.fnmatchnow takes an optional parameternormcaseand this parameter defaults to self.module.normcase (using case normalization most pertinent to the path object itself). Note that this change means that any paths using a custom ntpath module on non-Windows systems will have different fnmatch behavior. Before:# on Unix >>> p = path('Foo') >>> p.module = ntpath >>> p.fnmatch('foo') FalseAfter:
# on any OS >>> p = path('Foo') >>> p.module = ntpath >>> p.fnmatch('foo') TrueTo maintain the original behavior, either don’t define the ‘module’ for the path or supply explicit normcase function:
>>> p.fnmatch('foo', normcase=os.path.normcase) # result always varies based on OS, same as fnmatch.fnmatchFor most use-cases, the default behavior should remain the same.
Issue #50: Methods that accept patterns (
listdir,files,dirs,walk,walkdirs,walkfiles, andfnmatch) will now use anormcaseattribute if it is present on thepatternparameter. The path module now provides aCaseInsensitivePatternwrapper for strings suitable for creating case-insensitive patterns for those methods.
4.4¶
- Issue #44: _hash method would open files in text mode, producing invalid results on Windows. Now files are opened in binary mode, producing consistent results.
- Issue #47: Documentation is dramatically improved with Intersphinx links to the Python os.path functions and documentation for all methods and properties.
4.2¶
open()now passes all positional and keyword arguments through to the underlyingbuiltins.opencall.
4.1¶
- Native Python 2 and Python 3 support without using 2to3 during the build process.
4.0¶
- Added a
chunks()method to a allow quick iteration over pieces of a file at a given path.- Issue #28: Fix missing argument to
samefile.- Initializer no longer enforces isinstance basestring for the source object. Now any object that supplies
__unicode__can be used by apath(except None). Clients that depend on a ValueError being raised forintand other non-string objects should trap these types internally.- Issue #30:
chownno longer requires both uid and gid to be provided and will not mutate the ownership if nothing is provided.
3.0¶
- Minimum Python version is now 2.5.
2.6¶
Issue #5: Implemented path.tempdir, which returns a path object which is a temporary directory and context manager for cleaning up the directory.
Issue #12: One can now construct path objects from a list of strings by simply using path.joinpath. For example:
path.joinpath('a', 'b', 'c') # or path.joinpath(*path_elements)