Python 是否将包_dir设置为。。?

Python 是否将包_dir设置为。。?,python,packaging,setuptools,distribute,Python,Packaging,Setuptools,Distribute,我将一个Git存储库克隆到了myproject,在存储库的根目录下有一个\uuu init\uuuuuuuuuupy,使整个东西成为一个可导入的Python包 我正在尝试为这个包编写setuptoolssetup.py,它也将位于存储库的根目录中,位于\uuuuuu init\uuuuuuuuuuuuuuuupy文件旁边。我希望setup.py将它所在的目录作为一个包安装到中。如果setup.py本身作为安装的一部分出现是可以的,但是如果它没有出现则更好。理想情况下,这也应该在可编辑模式下工作(

我将一个Git存储库克隆到了
myproject
,在存储库的根目录下有一个
\uuu init\uuuuuuuuuupy
,使整个东西成为一个可导入的Python包

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

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


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

使用符号链接不会很好地工作(您应该得到递归嵌套目录),请参阅一个难看的hack,但它的优点是使用
pip
另请参阅

据我所知,这应该是可行的:

myproject-dev/
├── __init__.py
├── setup.py
└── submodule
    └── __init__.py

更新

对于可编辑或开发安装,一种方法是手动修改
easy install.pth
文件

假设:

  • 项目位于:
    /home/user/workspace/empty/project
  • 使用虚拟环境
    .venv
  • 该项目安装有
    python3-m pip install-e.
    python3 setup.py develope
  • 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
    只包含目录
    项目
  • 模块
    项目设置
    也可导入
#!/usr/bin/env python3
import setuptools
setuptools.setup(
    name='MyProject',
    version='0.0.0.dev0',
    packages=['myproject', 'myproject.submodule'],
    package_dir={
        'myproject': '.',
    },
)