正在将package_dir设置为.



我有一个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也是可导入的

相关内容

  • 没有找到相关文章

最新更新