Command line tool for symlinking directories with reusable code into the project
Project description
depz
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 ofmylib?
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.txtformyproject/abc/libs/mylib/depz.txtformylib
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file depz-0.0.6.1.tar.gz.
File metadata
- Download URL: depz-0.0.6.1.tar.gz
- Upload date:
- Size: 13.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6df0912576fb44d6999e8a03d9140677fd43c0e89724894c3fc268eb9cdedbc8
|
|
| MD5 |
0d544a950b36b011b0e1f15b8f69f8df
|
|
| BLAKE2b-256 |
f63faa9f18cffe7fef59b3cd398138720bc19df647f4aca326b079570815ec90
|
File details
Details for the file depz-0.0.6.1-py3-none-any.whl.
File metadata
- Download URL: depz-0.0.6.1-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d300365d4ba3431a032506f4534534acc44857f266b99e53c07a32850ec8aa6
|
|
| MD5 |
e3b949027bb5ab256f6c2a92169a011f
|
|
| BLAKE2b-256 |
c9c03e69d360ff3b5ebdfb227bb80910f0457b9dda0db3e759096f4dd76bbd14
|