假设你有一个名为的项目proj,在这个项目中你有以下结构:
proj/
dists/
doc/
src/
__init__.py
xyz.py
abc.py
test/
setup.py
Run Code Online (Sandbox Code Playgroud)
如您所见,项目的所有内容都在src子文件夹中.如何从src文件夹中制作distutils发行包?
我的天真想法,按照教程,将编写setup.py如下:
#omitting basics
setup(
name='proj',
packages=['src'],
package_dir={'proj':'src'}
)
Run Code Online (Sandbox Code Playgroud)
但是在将生成的软件包安装到我的系统之后,我仍然需要导入src.xyz而不是导入proj.xyz,这将是目标和预期的结果.
我已经使用了一段时间的setuptools,最近使用pip为我的项目创建了发行版,并且一切正常:诸如“ python setup.py sdist”,“ python setup.py install”之类的命令按配置工作。现在,我想使用pip以“可编辑”的方式安装,以简化我对该程序包进行维护时的测试。所以我尝试了
cd \
pip install -e .\mypackage
Run Code Online (Sandbox Code Playgroud)
这会将路径:c:\ mypackage添加到C:\ python27 \ Lib \ site-packages \ easy-install.pth。但是,在我的情况下,这是错误的,因为mypackage的结构如下:
C:\mypackage
setup.py
src
mypackage
__init__.py
...
docs
tests
Run Code Online (Sandbox Code Playgroud)
因此easy-install.pth应该包含c:\ mypackage \ src,而不是c:\ mypackage。我可以手动编辑easy-install.pth以将“ \ src”添加到添加的路径,然后“ import mypackage”成功完成,应该如此。如果我从c:\ mypackage运行命令“ python setup.py development”,则会发生相同的问题,因此该问题很可能在setuptools级别上。
setup.py具有:
setup(
...
packages = find_packages('src'),
package_dir = {'mypackage': 'src/mypackage'},
...
)
Run Code Online (Sandbox Code Playgroud)
(唯一的其他设置参数是文本项,例如作者,版本等,由于与问题无关,因此未列出)。
我不想在easy-install.pth中编辑路径。看了看文档,什么都看不到,表明将包源根目录放在与setup.py分开的文件夹中是一个问题。我做错了什么?