为现有项目结构创建 setup.py

Creating setup.py for existing project structure

我开始使用具有以下文件夹结构的项目,其中每个顶级文件夹都位于单独的存储库中:

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

我想pip install -e并且能够做到:

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

不改变文件夹结构(由项目修复)。

问题:如何创建相应的setup.py

你不能使用 pip install -e 来做到这一点,因为选项 -e "installs" 在 development/editable 模式下打包。它实际上并没有安装任何东西,只是创建了一个 link 允许 Python 直接从开发目录导入模块。不幸的是,在您的情况下,这是不可能的——目录 project-coreproject-api 的名称中包含禁止使用的字符 (-)——这些目录无法就地导入。

但是 pip install . 可以从这些目录安装顶级包 apicore。首先你必须添加 __init__.py:

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

下面的 setup.py 完成剩下的工作:

#!/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',
    }
)

运行 pip install . 大功告成。在 Python.

中执行 import api, core

PS。如果可以在根目录下创建 symlinks:

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

你可以使用pip install -e .