# Revision history [back]

You can tell the setup.py to install individual modules rather than packages:

http://docs.python.org/2/distutils/setupscript.html#listing-individual-modules

A setup.py for your example might look like this:

from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

d = generate_distutils_setup(
py_modules=['camera_info_manager'],
package_dir={'': 'src'}
)

setup(**d)


When I was testing this I noticed that catkin warns:

*** Arguments ['py_modules'] to setup() not supported in catkin devel space in setup.py of camera_info_manager_py


This indicates to me that we never implemented support for this argument in devel spaces. We should support this, so I opened a ticket:

https://github.com/ros/catkin/issues/399

For now that means that if you want your package to work in the devel space then you should wrap it in a python package, and you can transparently do this using the package __all__ magic variable.

http://docs.python.org/2/tutorial/modules.html#importing-from-a-package

You can tell the setup.py to install individual modules rather than packages:

http://docs.python.org/2/distutils/setupscript.html#listing-individual-modules

A setup.py for your example might look like this:

from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

d = generate_distutils_setup(
py_modules=['camera_info_manager'],
package_dir={'': 'src'}
)

setup(**d)


When I was testing this I noticed that catkin warns:

*** Arguments ['py_modules'] to setup() not supported in catkin devel space in setup.py of camera_info_manager_py


This indicates to me that we never implemented support for this argument in devel spaces. We should support this, so I opened a ticket:

https://github.com/ros/catkin/issues/399

For now that means that if you want your package to work in the devel space then you should wrap it in a python package, and you can transparently do this using the package __all__ magic variable.

http://docs.python.org/2/tutorial/modules.html#importing-from-a-package

UPDATE:

src/
camera_info_manager.py


from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

d = generate_distutils_setup(
py_modules=['camera_info_manager'],
package_dir={'': 'src'}
)

setup(**d)


I would propose that you change your layout to this:

src/
camera_info_manager/
__init__.py
camera_info_manager.py


And in the __init__.py:

from .camera_info_manager import CameraInfoManager, etc...
__all__ = ['CameraInfoManager', 'free_func1', 'another_class']


Users will still be able to do this:

import camera_info_manager
cinfo = camera_info_manager.CameraInfoManager()


Or

from camera_info_manager import *
cinfo = CameraInfoManager()


But they will also be able to do this:

from camera_info_manager.camera_info_manager import CameraInfoManager
cinfo = CameraInfoManager()


from distutils.core import setup