<span style="font-family: courier new,monospace;">Code of our project has split into several packages and we deploy the project using buildout.</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">All worked fine until I need to dynamically inspect python modules.</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Here is structure of our src directory</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">├───project.api.config</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ ├───project</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ └───api</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ └───config</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ └───settings</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ └───project.api.config.egg-info</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">├───project.api.contacts</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ ├───project</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ └───api</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ └───contacts</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ ├───importer</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ └───views</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ └───project.api.contacts.egg-info</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">├───project.api.core</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ ├───project</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ └───api</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ └───core</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ ├───js</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ ├───lib</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ ├───management</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ │ └───commands</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ ├───middleware</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ │ ├───sessions</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">│ │ └───users</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">│ └───project.api.core.egg-info</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> </span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Buildout by itself generates bin/python which look like:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">import sys</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sys.path[0:0] = [</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\src\\project.api.core',</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\src\\project.api.config',</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\src\\project.api.contacts',</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\eggs\\lockfile-0.8-py2.6.egg',</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\parts\\django',</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'c:\\users\\ad\\project\\eggs\\web.py-0.33-py2.6.egg',</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">....</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Regular code like "import project.api.config" worked fine, but now I'm tryed __import__('project.api.config'):</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">$ bin/python</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">>>> import project.api.config</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">>>> __import__('project.api.config')</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><module 'project from 'c:\users\ad\project\src\project.api.contacts\project\__init__.pyc'></span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">>>></span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">What's wrong?</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Ok, I'm trying imp:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">>>> import imp</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">>>> imp.find_module('project.api.config')</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Traceback (most recent call last):</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> File "<console>", line 1, in <module></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">ImportError: No module named project.api.config</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">>>> import sys</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">>>> sys.path[1]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">'c:\\users\\ad\\project\\src\\project.api.config'</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">>>> imp.find_module('project.api.config', sys.path[1])</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Traceback (most recent call last):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> File "<console>", line 1, in <module></span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">ImportError: No frozen submodule named c:\users\ad\project\src\project.api.config.project.api.config</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">>>></span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">There is setup.py for project.api.config:</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">import os</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">from setuptools import setup, find_packages</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">name = "project.api.config"</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">install_requires = [</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'zc.buildout', </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'setuptools', </span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'web.py>=0.33',</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'project.api.core',</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> 'Django>=1.1.0',</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> 'lockfile'</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">]</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">if sys.platform != 'win32':</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> install_requires.append('python-daemon')</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">setup(</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> name = name,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> version = "1.0",</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> author = "Andrew Degtiariov",</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> author_email = "<a href="mailto:andrew.degtiariov@gmail.com">andrew.degtiariov@gmail.com</a>",</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> description = "...",</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> license = "Commercial",</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> packages=find_packages(os.path.dirname(__file__), exclude=['ez_setup']),</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> namespace_packages=['project, 'project.api'],</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> include_package_data=True,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> zip_safe=False,</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> install_requires = install_requires</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">)</span><br style="font-family: courier new,monospace;">
<br>What's wrong? We really need to split the code for several eggs and want that all of our package's names starts from 'project.api'<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">--</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Andrew Degtiariov</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">DA-RIPE</span><br style="font-family: courier new,monospace;">