Modifying a symlink in python

meteoritepanama picture meteoritepanama · Nov 28, 2011 · Viewed 26k times · Source

How do I change a symlink to point from one file to another in Python?

The os.symlink function only seems to work to create new symlinks.

Answer

lellimecnar picture lellimecnar · Jan 5, 2015

If you need an atomic modification, unlinking won't work.

A better solution would be to create a new temporary symlink, and then rename it over the existing one:

os.symlink(target, tmpLink)
os.rename(tmpLink, linkName)

You can check to make sure it was updated correctly too:

if os.path.realpath(linkName) == target:
    # Symlink was updated

According to the documentation for os.rename though, there may be no way to atomically change a symlink in Windows. In that case, you would just delete and re-create.