Skip to main content

Command line tool for symlinking directories with reusable code into the project

Project description

depz

Generic badge PyPI version shields.io Actions Status Generic badge Generic badge

Command-line tool for symlinking directories with reusable source code into the project.

Language-agnostic.

Why

Reusing code should be simple. If I have the needed code in a directory on a local drive, I just want to include it in the project. Without packaging it as a library for distribution or messing with IDE settings.

My first thought is to create a symlink:

$ ln -s /abc/libs/mylib /abc/project/mylib

Now project sees mylib as a local directory project/mylib. I can edit both project and mylib while working on the project.

But here problems arise:

  • Portability. How do I make the symlinks easy to recreate on another system?
  • Recursive local dependencies. How to include not only mylib, but all the dependencies of mylib?

The answer is depz. It reduces these tasks to a one-line command.

Install

Get a working Python ≥3.7 and pip. You may also need a computer. Then:

$ pip3 install depz

Make sure that it is installed:

$ depz --help

Upgrade it later:

$ pip3 install depz --upgrade

Use

  • Specify dependencies in depz.txt
  • Run the command depz

Specify dependencies

File xxx/depz.txt lists dependencies for xxx:

  • /abc/myproject/depz.txt for myproject
  • /abc/libs/mylib/depz.txt for mylib

The depz.txt format:

# lines that specify local directory 
# names are LOCAL dependencies

/absolute/path/to/mylib1
../libs/mylib2
~/path/mylib3

# lines that cannot be resolved to an existing 
# directory are considered EXTERNAL dependencies

requests
numpy

Run

$ cd /abc/myproject
$ depz

This recursively scans /abc/myproject/depz.txt and prints all the found dependencies. Doesn't make any changes to the file system.


$ cd /abc/myproject
$ depz --relink

Removes all the symlinks found in /abc/myproject. Adds new symlinks to the local dependent directories. Prints external dependencies.

Local dependencies

They are recursive

When a project depends on local mylib, it means, it also depends on all the dependencies of mylib. So after scanning myproject/depz.txt we will also scan mylib/depz.txt to include its dependencies too.

Paths are relative to the current depz.txt

When we scan /abc/myproject/depz.txt, the paths are relative to /abc/myproject. Then we found a link to mylib and started scanning /abc/mylib/depz.txt. The paths found there are relative to /abc/mylib.

But all the symlinks will go directly into /abc/myproject.

The following examples show how the directories will be linked when running depz for /abc/project:

Default behavior

File Line Resolves to Creates symlink
/abc/project/depz.txt /abc/libs/aaa /abc/libs/aaa /abc/project/aaa
/abc/project/depz.txt ../libs/bbb /abc/libs/bbb /abc/project/bbb
/abc/libs/aaa/depz.txt ../ccc /abc/libs/ccc /abc/project/ccc

With --mode=layout

File Line Resolves to Creates symlink
/abc/project/depz.txt /abc/libs/aaa /abc/libs/aaa/src
/abc/libs/aaa/test
/abc/project/src/aaa
/abc/project/test/aaa
/abc/project/depz.txt ../libs/aaa /abc/libs/bbb/src
/abc/libs/bbb/test
/abc/project/src/bbb
/abc/project/test/bbb
/abc/libs/aaa/depz.txt ../ccc /abc/libs/ccc/src
/abc/libs/ccc/test
/abc/project/src/ccc
/abc/project/test/ccc

This is useful for frameworks with strict directory structures such as Flutter.

External dependencies

By default, the list of all external dependencies is simply printed to the terminal like that:

$ depz

Depz file: /abc/myproject/depz.txt
...
External dependencies: pandas numpy requests

The -e argument causes the command to print only the list of dependencies.

Print in one line:

$ depz -e line

pandas numpy requests
[click to open] This can be useful for installing Python external dependencies
$ pip3 install $(depz -e line)

Or install external dependencies and symlink local ones:

$ pip3 install $(depz -e line --relink)

Print one per line:

$ depz -e multi

pandas
numpy
requests
[click to open] Sample usage for creating requirements.txt for Python
$ depz -e multi > requirements.txt

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

depz-0.0.6.1.tar.gz (13.5 kB view hashes)

Uploaded Source

Built Distribution

depz-0.0.6.1-py3-none-any.whl (14.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page