为现有项目结构创建 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-core
和 project-api
的名称中包含禁止使用的字符 (-
)——这些目录无法就地导入。
但是 pip install .
可以从这些目录安装顶级包 api
和 core
。首先你必须添加 __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 .
我开始使用具有以下文件夹结构的项目,其中每个顶级文件夹都位于单独的存储库中:
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-core
和 project-api
的名称中包含禁止使用的字符 (-
)——这些目录无法就地导入。
但是 pip install .
可以从这些目录安装顶级包 api
和 core
。首先你必须添加 __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 .