Warning: You are using the test version of PyPI. This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of TestPyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

PyDevNS is a pure Python DNS server for developers. You know how you need a domain name to use for interacting with your app locally? Well, this is the tool for you.

I know what you’re thinking

Dude, what? I just put local.dev in my /etc/hosts file.

Well, that’s all well and good, but what about when you need local.dev and *.local.co?

There’s like a million things out there that do this. I could use dnsmasq, or one of the other 40 random Python “dev DNS” servers you probably stole your implementation from.

OK, dnsmasq kind of seems like overkill, but what about when you need local.dev or reallycoolprogrammer.local.dev to work from inside a docker container?

Well then I just make dnsmasq resolve it to my real IP instead of

So you edit the config and restart dnsmasq every time you move from home, to the coffee shop, to the office, wherever…

That is kind of a pain, now that you mention it…

Thought so.

Default Behavior

If you run devns with no arguments, the server will start, bind to with a random port and try to discover a suitable IP address to use for resolving any incoming DNS requests. It literally does not care what domain you ask for, it always responds and always with the same IP, hopefully the IP address of your actual network interface (e.g. or whatever). It tries to figure that out on its own, and I think it does a pretty good job of it.

But then how do I make DNS queries go to it, especially if it’s using a random port every time it runs?

Glad you asked. It’ll also try to write a file to /etc/resolver/dev, which if your OS supports such things, would tell it to send any DNS queries for domains ending it .dev to devns.

But wouldn’t I need to…

Run it with sudo to do that? Yeah probably, unless your system is insane and just lets anybody write to /etc all willy nilly, in which case you have bigger problems than getting local.dev to resolve to something sensible.


Run the server with a random port and auto-configured resolver for .dev resolving to a sensible, auto-detected IP address:

sudo devns

Listen on port 53535 without writing any resolver files:

devns --port 53535 --no-resolver

Respond with a specific IP every time instead of an auto discovered one:

sudo devns --address

Listen on port 53535, write config files for .dev and .local.co:

sudo devns --port 53535 --domains dev local.co

Bind to a random port on, and make a lot of noise:

sudo devns --host -vvv

Here’s what devns --help gets you:

usage: devns [-h] [--verbose | --quiet] [--address ADDRESS] [--host HOST]
             [--port PORT] [--domains [DOMAIN [DOMAIN ...]]]
             [--resolver-dir DIRECTORY] [--no-resolver]

optional arguments:
  -h, --help            show this help message and exit
  --verbose, -v         verbose output
  --quiet, -q           quiet mode

  --address ADDRESS     IP address to respond with

  --host HOST           address to listen on
  --port PORT           port to listen on

  --domains [DOMAIN [DOMAIN ...]]
                        domains to create resolver files for
  --resolver-dir DIRECTORY
                        where to put resolver files
  --no-resolver, -nr    disable creating resolver files
Release History

Release History


This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
devns-0.3.3-py2.py3-none-any.whl (13.8 kB) Copy SHA256 Checksum SHA256 3.6 Wheel Mar 27, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting