情况
这是示例包的结构:
$ tree Foo/
Foo/
├── setup.py
└── src
├── bar.py
└── __init__.py
包的名称应为foo
但是包的源文件放置在src
folder.
文件的内容是:
设置.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
Problem
做的时候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
now:
>>> import src
1
安装时使用-e
交换机创建了一个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
The 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
and the top_level.txt
:
$ cat Foo/foo.egg-info/top_level.txt
foo
因此,在导入过程中,Python 似乎忽略了中显示的信息Foo/foo.egg-info/
但只是扫描Foo/
对于一个名为foo
(未找到)。
Question
如何准备一个使用单独源文件夹(其名称与包名称不同)的包,以便我可以在可编辑模式下安装它并仍然像正常安装一样使用它(即import <package-name>
例如,在任何情况下都应该有效)。