python - Is it really possible to use a different convention to lay out source directory without breaking intra-package references? -


suppose working on python package. here structure of package (expressed in terms of hierarchical file system):

/packagename     /src         __init__.py         /subpackage1             __init__.py             module1a.py             module1b.py         /subpackage2             __init__.py             module2a.py             module2b.py     /tests     install     license     readme     setup.py 

distutils used build, distribute , install package. in setup script possible tell distutils convention lay out source directory (see here). in short put:

package_dir = {'packagename', 'src'} 

however there issue when example module1a needs import module2a absolute import (see here). in short put in module1a:

import src.module2a 

once package distributed , installed pip simple:

import packagename 

raises:

importerror: no module names src.module2a 

a simple solution rename src directory packagename (as question states) there solution use different convention lay out source directory (perhaps distutils or pip option missed).

thank in advance.

register package with:

package_dir = {'': 'src'} 

and create packagename directory in src. want import packagename, not src. src not meant package itself:

/packagename     /src         /packagename             __init__.py             /subpackage1                 __init__.py                 module1a.py                 module1b.py             /subpackage2                 __init__.py                 module2a.py                 module2b.py     /tests     install     license     readme     setup.py 

you can use relative imports between modules anyway, absolute import now

from package.subpackage2 import module2b 

or use relative imports:

from ..subpackage2 import module2b 

sample real-life project: https://github.com/mjpieters/collective.transmogrifier


Comments

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

ios - Change Storyboard View using Seague -