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年前就解决了。

简而言之,在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,这不是你想要的。

@Oliver在这里的回答为我澄清了这一点。

我的TLDR是,要支持两个版本(python setup.py installpip install .(和可编辑安装(python setup.py developpip install -e .(必须将文件结构更改为

project_name
setup.py 
user_defined_name
my_defined_name
__init__.py
... 
docs 
tests

和你的setup.py

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

您可以使用支持仅发布(不可编辑安装(

project_name
setup.py 
user_defined_name
__init__.py
... 
docs 
tests
setuptools.setup(
package_dir={'my_defined_name': 'user_defined_name'},
packages=['my_defined_name']
)

相关内容

  • 没有找到相关文章

最新更新