noipy: DDNS update tool
Command line tool to update DDNS hosts IP address via update API. Initially the tool was designed to update IP address only on No-IP DDNS provider. But now noipy has support for the following DDNS providers:
Installation
Install with pip:
$ pip install noipy
Or with Snappy on supported distros:
$ sudo snap install noipy
Note: noipy will also install the Requests HTTP library.
Usage
Basic usage of noipy command line tool:
$ noipy -u <your username> -p <your password> -n <your hostname on DDNS provider>
--provider {generic|noip|dyn|duck}
For DuckDNS provider, the command line would look like this:
$ noipy -u <your token> -n <your DuckDNS domain> --provider duck
Or you can just use --hostname (-n) and --provider arguments if you have previously stored your auth information with --store option.
$ noipy --hostname <your hostname on DDNS provider> --provider {generic|noip|dyn| duck}
You can also specify a custom DDNS URL (thanks to @jayennis22):
$ noipy --hostname <your hostname on DDNS provider> [--provider generic]
--url <custom DDNS URL>
It is also possible to inform an IP address other than the machine’s current:
$ noipy --hostname <your hostname on DDNS provider> 127.0.0.1
If --provider option is not informed, generic will be used as provider.
For details:
$ noipy --help
Storing auth information
With --store option it is possible to store login information. The information is sotred in $HOME/.noipy/ directory:
$ noipy --store --username <your username> --password <your password> \
--provider {generic|noip|dyn| duck}
Or simply:
$ noipy --store --provider {generic|noip|dyn| duck}
And type username and password when required.
Note: password is stored simply encoded with Base64 method and is not actually encrypted!
Running tests
Install tests dependencies (tox and flake8):
$ pip install -r requirements_dev.txt
Test the code against all supported Python versions and check it against PEP8 with tox:
$ tox
Check PEP8 only:
$ tox -e pep8
Copyright & License
Copyright (c) 2013 Pablo Vieira (pv8).
Changelog
2.0.0 (2025-06-28)
BREAKING CHANGE: Dropped support for Python 2.7 and Python 3.6/3.7
BREAKING CHANGE: Now requires Python 3.8 or higher
Remove Python 2/3 compatibility code (from __future__ import print_function, raw_input)
Update dependencies to modern versions: - pytest: 4.6.9 → 7.4.0 (Python 3.13 compatible) - flake8: 3.8.4 → 6.1.0 - tox: 3.25.0 → 4.7.0
Add support for Python 3.10, 3.11, 3.12, 3.13
Fix tox configuration for modern Python versions
Remove argparse conditional import (built-in since Python 3.2)
GitHub Actions workflow modernization
Release Drafter automation for better release notes
1.5.3 (2020-02-09)
Back to the previous response format from https://httpbin.org/ip
1.5.2 (2019-04-03)
Handle new response from https://httpbin.org/ip
1.5.1 (2017-12-19)
Support for Python 3.6
Minor refactor related to code style
Improved integration with codeclimate
1.5.0 (2016-10-30)
1.4.4 (2016-04-11)
Bugfix
1.4.3 (2015-10-15)
1.4.2 (2015-08-22)
Bugfix: storing auth credentials properly from stdin
Test case for --store option getting username/password from stdin
1.4.0 (2015-04-25)
Using the awesome Requests HTTP library
Using tox in order to ease test against multiple Python versions
1.3.1 (2014-12-19)
Send update to DDNS only if IP address has changed
1.3.0 (2014-12-16)
Support for custom DDNS URL via --url parameter
1.2.3 (2014-10-10)
Unit tests improvements and PluginsTest bug fixes
Custom config directory feature bug fix (--config argument)
1.2.2 (2014-07-03)
PEP8’d code (Closes #5)
Switched to Apache License, Version 2.0
Unit test improvement
Minor feature: custom config directory via -c or --config argument.
1.2.1 (2014-06-30)
Bug fix (execution via command line. issue #5)
1.2.0 (2014-04-21)
Support for DuckDNS domains update
1.1.4 (2013-08-29)
Test case improvements
Coveralls.io support
1.1.3 (2013-07-24)
Python 3.3 compatibility
1.1.0 (2013-05-15)
Support for DynDNS Update API
DDNS auth info storage changed
1.0.1 (2013-05-10)
Added flexibility to DNS updater with abc.ABCMeta
Code organization
Manual settings file removed (auth info can be stored via command line)
0.1.0 (2013-03-22)
Conception
Metadata
Release files for noipy 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| noipy-2.0.0.tar.gz | 19.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| noipy-2.0.0-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 34.3 kB
Release files / noipy-2.0.0.tar.gz
| Download URL | noipy-2.0.0.tar.gz |
|---|---|
| Size | 19.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e30da09d61bd7609b6d915846bb1df0ccce86391d53bacdc6de09488260fe709
|
|
BLAKE2b-256 checksum How to use checksums |
e8ddd91f2f715d3ad42fe7fd3450ca66a3bc14f6f0ebb8b3cec884be850599db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2025.
Transparency logRelease files / noipy-2.0.0-py2.py3-none-any.whl
| Download URL | noipy-2.0.0-py2.py3-none-any.whl |
|---|---|
| Size | 15.0 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
fd70d95747cd26a81abebb4fbdbb5352c69cd5e0ac6ecb195429b043366a13d9
|
|
BLAKE2b-256 checksum How to use checksums |
f8da5c659443df1ef7feb80680f6ba496691ac89f2c8fe04bc1dc090c07ce2ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 3, 2025.
Transparency log