I'm writing a family of Python scripts within a project; each script is within a subdirectory of the project, like so:
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
Now several of the scripts share some code. The shared code is best considered part of the project itself, and not something I would compile separately and make a library out of, or drop in a sitewide PYTHONPATH. I could place that code in various places, such as in the projectroot
directory itself, or in a child directory of projectroot
called common
(perhaps).
However, most of the ways I have thought of so far involve making packages out of my subprojects with empty __init__.py
files and using relative imports (or redundantly messing with sys.path
in every subproject. Worse, it seems like building a package structure around this family of scripts runs afoul of the following warning from the rejected PEP-3122:
Attention! This PEP has been rejected. Guido views running scripts within a package as an anti-pattern.
If scripts within a package is anti-patternish, how can I set things up in a way which keeps the common code in the same project? Or is a module and package-based system acceptable here? Which is the cleanest approach? (FWIW I would prefer to have a file such as shared.py
or common.py
in the project root directory, rather than making a utility directory that is a sibling to the "real" subprojects.)