是否将包_dir设置为。。?

2024-09-28 01:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我将一个Git存储库克隆到了myproject中,在存储库的根目录下有一个__init__.py,使整个内容成为一个可导入的Python包

我正在尝试为这个包编写setuptoolssetup.py,它也将位于存储库的根目录中__init__.py文件旁边。我希望setup.py将它所在的目录作为一个包安装到中。如果setup.py本身作为安装的一部分出现是可以的,但是如果它没有出现则更好。理想情况下,这也应该在可编辑模式下工作(pip install -e .

是否支持此配置?我可以通过给setup()设置一个package_dir= {"": ".."},参数,告诉它在当前目录上方的目录中查找myproject来实现它。但是,这需要始终从名为myproject的目录安装包,如果它是通过pip安装的,或者如果有人正在使用名为myproject-dev的Git克隆,或者在任何其他情况下,情况似乎都不是这样

我正在考虑的另一个黑客是指向存储库中名为mypackage.的符号链接。这应该行得通,但我想先看看是否有更好的办法


Tags: pip文件pygit目录编辑内容init
2条回答

使用符号链接将不能很好地工作(您应该得到递归嵌套目录),请参阅my answer to this other post了解一个丑陋的hack,但它具有使用pip的优点

另见Create editable package setup.py in the same root folder as __init__.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
  • 使用虚拟环境.venv
  • 该项目安装有python3 -m pip install -e .python3 setup.py develop
  • Python版本是3.6

然后:

  • 该文件位于/home/user/workspace/empty/project/.venv/lib/python3.6/site-packages/easy-install.pth等位置
  • 它的内容是:/home/user/workspace/empty/project

为了让导入按预期工作,可以编辑此行以阅读以下内容:

  • /home/user/workspace/empty

注:

  • /home/user/workspace/empty中,所有看起来像Python包的东西都很容易被导入,这就是为什么最好将项目放在它自己的目录中,在本例中,目录empty只包含目录project
  • 模块project.setup也是可导入的

相关问题 更多 >

    热门问题