How do I get the current topmost package, i.e., the name defined in setup.py?
Here is my tree
:
.
|-- README.md
|-- the_project_name_for_this_pkg
| |-- __init__.py
| |-- __main__.py
| |-- _config
| | `-- foo.conf
| |-- _data
| | `-- logging.yml
| `-- tests
| |-- __init__.py
| `-- test_foo.py <--- # executing from here
|-- requirements.txt
`-- setup.py
4 directories, 9 files
The only solution I've gotten to work so far is this:
import os
import sys
os.path.basename(sys.path[1])
But this is obviously a bad solution. Other solutions like having a __name__
in my uppermost __init__.py
file and using ast.parse
to read in the relevant section of setup.py
also seems cumbersome.
Other solutions I've tried—by calling them within a unittest.TestCase
inheriting class
in my tests
python [sub]package—include checking sys.modules[__name__]
, inspect.getmodule
& inspect.stack
, as well as the answers to these questions:
BTW: In case you were wondering why I want the package name… it's so I can run things like:
import pkg_resources
version = pkg_resources.require('the_project_name_for_this_pkg')[0].version
data_file = path.join(resource_filename('the_project_name_for_this_pkg', '__init__.py'),
'_config', 'data_file.txt')
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…