1

I started working on a project with the following folder structure where each top folder lives in a separate repository:

project-api/
  source/
     module1.py
     module2.py
project-core/
  source/
     module3.py
     module4.py

I would like to pip install -e and be able to do:

from api.module1 import function1
from core.module3 import function3

without changing the folder structure (fixed by the project).

Question: How can I create the corresponding(s) setup.py?

1 Answer 1

1

You cannot do that with pip install -e because option -e "installs" packages in development/editable mode. It doesn't actually install anything but creates a link that allows Python to import modules directly from the development directory. Unfortunately in your case that impossible — directories project-core and project-api contain forbidden character in their name (-) — these directories cannot be made importable in-place.

But pip install . could be made to install top-level packages api and core from these directories. First you have to add __init__.py:

touch project-api/source/__init__.py
touch project-core/source/__init__.py

And the following setup.py do the rest:

#!/usr/bin/env python

from setuptools import setup

setup(
    name='example',
    version='0.0.1',
    description='Example',
    packages=['api', 'core'],
    package_dir={
        'api': 'project-api/source',
        'core': 'project-core/source',
    }
)

Run pip install . and you're done. Execute import api, core in Python.

PS. If you can create symlinks at the root:

ln -s project-api/source api
ln -s project-core/source core

you can use pip install -e .

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.