我有一个Git存储库克隆到myproject
中,在存储库的根目录下有一个__init__.py
,使整个东西成为一个可导入的Python包。
我正在尝试为该包编写一个setuptools setup.py
,它也将位于存储库的根目录中,__init__.py
文件旁边。我希望setup.py
以包的形式安装它所在的目录。如果setup.py本身是安装的一部分,那也没关系,但如果没有,那就更好了。理想情况下,这也应该在可编辑模式(pip install -e .
)中工作
是否支持此配置?我可以通过给setup()
设置一个package_dir= {"": ".."},
参数,告诉它在当前目录上方的目录中查找myproject
来实现它。然而,这要求包始终从名为myproject
的目录安装,如果它是通过pip
安装的,或者有人正在使用名为myproject-dev
的Git克隆,或者在任何其他情况下,情况似乎都不是这样。
我正在考虑的另一个破解方法是在存储库中创建一个名为mypackage
的指向.
的符号链接。这应该有效,但我想先看看是否有更好的方法。
另请参阅在与__init__.py 相同的根文件夹中创建可编辑包setup.py
据我所知,这应该有效:
myproject-dev/
├── __init__.py
├── setup.py
└── submodule
└── __init__.py
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='MyProject',
version='0.0.0.dev0',
packages=['myproject', 'myproject.submodule'],
package_dir={
'myproject': '.',
},
)
使可编辑或开发安装工作的一种方法是手动修改easy-install.pth
文件。
假设:
- 项目所在地:
/home/user/workspace/empty/project
- 使用虚拟环境CCD_ 17
- 该项目安装有CCD_ 18或CCD_
- Python版本是3.6
然后:
- 在诸如CCD_ 20的位置处找到该文件
- 其内容为:CCD_ 21
为了让导入按预期工作,可以编辑此行以读取以下内容:
/home/user/workspace/empty
注:
/home/user/workspace/empty
中所有看起来像Python包的东西都很容易被导入,这就是为什么将项目放在自己的目录中是个好主意,在这种情况下,目录empty
只包含目录project
- 模块
project.setup
也是可导入的