blob: 59fb163e92a3c4902b3f05daff44a5eb8cb0d330 [file] [log] [blame]
.. include:: global.rst.inc
.. _installation:
Installation
============
|project_name| requires 3.7+ to work. See a list of :ref:`installation-dependencies`.
Installing from PyPI using pip
------------------------------
.. parsed-literal::
$ python -m pip install -U |project_name|
# or to install the watchmedo utility:
$ python -m pip install -U |project_name|\[watchmedo]
Installing from source tarballs
-------------------------------
.. parsed-literal::
$ wget -c https://pypi.python.org/packages/source/w/watchdog/watchdog-|project_version|.tar.gz
$ tar zxvf |project_name|-|project_version|.tar.gz
$ cd |project_name|-|project_version|
$ python -m pip install -e .
# or to install the watchmedo utility:
$ python -m pip install -e ".[watchmedo]"
Installing from the code repository
-----------------------------------
::
$ git clone --recursive git://github.com/gorakhargosh/watchdog.git
$ cd watchdog
$ python -m pip install -e .
# or to install the watchmedo utility:
$ python -m pip install -e ".[watchmedo]"
.. _installation-dependencies:
Dependencies
------------
|project_name| depends on many libraries to do its job. The following is
a list of dependencies you need based on the operating system you are
using.
+---------------------+-------------+-------------+--------+-------------+
| Operating system | Windows | Linux 2.6 | macOS | BSD |
| Dependency (row) | | | Darwin | |
+=====================+=============+=============+========+=============+
| XCode_ | | | Yes | |
+---------------------+-------------+-------------+--------+-------------+
The following is a list of dependencies you need based on the operating system you are
using the ``watchmedo`` utility.
+---------------------+-------------+-------------+--------+-------------+
| Operating system | Windows | Linux 2.6 | macOS | BSD |
| Dependency (row) | | | Darwin | |
+=====================+=============+=============+========+=============+
| PyYAML_ | Yes | Yes | Yes | Yes |
+---------------------+-------------+-------------+--------+-------------+
Installing Dependencies
~~~~~~~~~~~~~~~~~~~~~~~
The ``watchmedo`` script depends on PyYAML_ which links with LibYAML_.
On macOS, you can use homebrew_ to install LibYAML::
brew install libyaml
On Linux, use your favorite package manager to install LibYAML. Here's how you
do it on Ubuntu::
sudo apt install libyaml-dev
On Windows, please install PyYAML_ using the binaries they provide.
Supported Platforms (and Caveats)
---------------------------------
|project_name| uses native APIs as much as possible falling back
to polling the disk periodically to compare directory snapshots
only when it cannot use an API natively-provided by the underlying
operating system. The following operating systems are currently
supported:
.. WARNING:: Differences between behaviors of these native API
are noted below.
Linux 2.6+
Linux kernel version 2.6 and later come with an API called inotify_
that programs can use to monitor file system events.
.. NOTE:: On most systems the maximum number of watches that can be
created per user is limited to ``8192``. |project_name| needs one
per directory to monitor. To change this limit, edit
``/etc/sysctl.conf`` and add::
fs.inotify.max_user_watches=16384
macOS
The Darwin kernel/OS X API maintains two ways to monitor directories
for file system events:
* kqueue_
* FSEvents_
|project_name| can use whichever one is available, preferring
FSEvents over ``kqueue(2)``. ``kqueue(2)`` uses open file descriptors for monitoring
and the current implementation uses
`macOS File System Monitoring Performance Guidelines`_ to open
these file descriptors only to monitor events, thus allowing
OS X to unmount volumes that are being watched without locking them.
.. NOTE:: More information about how |project_name| uses ``kqueue(2)`` is noted
in `BSD Unix variants`_. Much of this information applies to
macOS as well.
_`BSD Unix variants`
BSD variants come with kqueue_ which programs can use to monitor
changes to open file descriptors. Because of the way ``kqueue(2)`` works,
|project_name| needs to open these files and directories in read-only
non-blocking mode and keep books about them.
|project_name| will automatically open file descriptors for all
new files/directories created and close those for which are deleted.
.. NOTE:: The maximum number of open file descriptor per process limit
on your operating system can hinder |project_name|'s ability to
monitor files.
You should ensure this limit is set to at least **1024**
(or a value suitable to your usage). The following command
appended to your ``~/.profile`` configuration file does
this for you::
ulimit -n 1024
Windows Vista and later
The Windows API provides the ReadDirectoryChangesW_. |project_name|
currently contains implementation for a synchronous approach requiring
additional API functionality only available in Windows Vista and later.
.. NOTE:: Since renaming is not the same operation as movement
on Windows, |project_name| tries hard to convert renames to
movement events. Also, because the ReadDirectoryChangesW_
API function returns rename/movement events for directories
even before the underlying I/O is complete, |project_name|
may not be able to completely scan the moved directory
in order to successfully queue movement events for
files and directories within it.
.. NOTE:: Since the Windows API does not provide information about whether
an object is a file or a directory, delete events for directories
may be reported as a file deleted event.
OS Independent Polling
|project_name| also includes a fallback-implementation that polls
watched directories for changes by periodically comparing snapshots
of the directory tree.