gpt4 book ai didi

python - 在可编辑模式下安装具有单独源目录的包

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:20 30 4
gpt4 key购买 nike

情况

这是示例包的结构:

$ tree Foo/
Foo/
├── setup.py
└── src
├── bar.py
└── __init__.py

包的名称应为 foo但是包的源文件放在 src 中文件夹。

文件的内容是:

setup.py:

from setuptools import setup

setup(
name='foo',
version='1',
packages=['foo'],
package_dir={'foo': 'src'}
)

__init__.py:

from .bar import bar

print(bar)

bar.py:

bar = 1

问题

在做 pip install Foo 时一切都很好,我可以按预期使用该包:

>>> import foo
1

但是,当我以可编辑模式 ( pip install -e Foo ) 安装包时,它不起作用:

>>> import foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'foo'

相反,我可以导入 src现在:

>>> import src
1

使用 -e 安装switch 创建了一个 site-packages/foo.egg-link包含以下内容的文件:

<path-to>/Foo
.

对应foo.egg-info目录已在 Foo 中创建:

$ tree Foo/foo.egg-info/
Foo/foo.egg-info/
├── dependency_links.txt
├── PKG-INFO
├── SOURCES.txt
└── top_level.txt

SOURCES.txt文件包含:

$ cat Foo/foo.egg-info/PKG-INFO
foo.egg-info/PKG-INFO
foo.egg-info/SOURCES.txt
foo.egg-info/dependency_links.txt
foo.egg-info/top_level.txt
src/__init__.py
src/bar.py

top_level.txt :

$ cat Foo/foo.egg-info/top_level.txt 
foo

因此在导入期间 Python 似乎忽略了 Foo/foo.egg-info/ 中显示的信息但只是扫描 Foo/一个名为 foo 的包裹(未找到)。

问题

我怎样才能准备一个使用单独的源文件夹(其名称与包名称不同)的包,以便我可以在可编辑模式下安装它并仍然像正常安装一样使用它(即 import <package-name> 应该例如,在任何情况下都可以工作)。

最佳答案

我相信在 src 文件夹中应该有一个包含 init.py 和 bar.py 的 foo 文件夹,这样包名称将是 foo 并且您可以导入 foo 包。不确定为什么它在可编辑模式下的行为不同。

关于python - 在可编辑模式下安装具有单独源目录的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139571/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com