首页 > 解决方案 > setup.py 中的 package_dir 未按预期工作

问题描述

我试图让用户在他们认为合适的任何文件夹名称下将代码编写为 python 模块(定义了 __init__.py 的文件夹)。之后,我想将该模块安装为 python 包,但自己定义导入名称。

文件夹结构如下:

project_name/
    user_defined_name/
        __init__.py
        ...
    setup.py

据此,应该能够将其添加到我的 setup.py 以使其正常工作:

setuptools.setup(
    package_dir={'my_defined_name': 'user_defined_name'},
    packages=['user_defined_name']
)

但我能够访问代码的唯一方法是使用import user_defined_name. 我尝试在没有 -e 的情况下安装软件包,但结果相同。离开packages=['..']设置功能也没有改变结果。

我的问题与这个问题类似,唯一的答案似乎是更改文件夹名称,这是我想避免的。该问题提到这可能是由于 setuptools 中的问题,但在 3 年前似乎已修复。

标签: pythonsetuptoolssetup.py

解决方案


简而言之,您的 : 中似乎需要类似的东西setup.py

setuptools.setup(
    package_dir={
        'my_defined_name': 'user_defined_name',
    },
    packages=[
        'my_defined_name',
    ],
)

正如Ilia Novoselov在对您的问题的评论中所说的那样

如果您正常打包和安装项目,这应该可以工作。你将能够import my_defined_name

不过,请注意,据我所知,如果您使用可编辑安装python setup.py developpython -m pip install --editable .),这将不起作用。这将是不可能的import my_defined_name,但你会能够import user_defined_name,这不是你想要的。


推荐阅读