如何使setup.py安装多个顶级包?

时间:2013-04-12 08:18:23

标签: python build installation setuptools distutils

我有一个我想组织的python包:

root/
    setup.py
    package1/
        __init__.py
        package2/
            __init__.py
        package3/
            __init__.py

我希望setup.pypackage1package2package3作为顶级软件包安装到正确的site-packages/目录中,以便我可以执行

import package1
import package2
import package3

没有问题。也许这需要多个setup.py个文件?

但最重要的是,我希望最终能够通过执行pip install root来安装所有三个软件包。我该怎么做呢?最好只有distutils解决方案,虽然setuptools也可以。

谢谢! URI

2 个答案:

答案 0 :(得分:2)

您可以尝试

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class PeopleService {

  constructor(private http:HttpClient) { }

  fetchPeople(): Observable<Object>{
    return this.http.get('/api/kanchiwork/');
    //return this.http.get('assets/response.json');
  };

}

告诉distutils软件包2和3位于package1内。

完整的setup.py可能如下所示:

packages=['package1', 'package2', 'package3'],
package_dir={
    'package2': 'package1',
    'package3': 'package1',
},

#!/usr/bin/env python from distutils.core import setup setup(name='root', version='1.0', description='Root package', author='Me', author_email='me@example.org', url='https://example.org/root', packages=['package1', 'package2', 'package3'], package_dir={ 'package2': 'package1', 'package3': 'package1', }, ) 将软件包安装到您要查找的结构中,例如

python -m pip install ./root

工作。

作为证明,这是import package1 import package2 import package3 在站点包目录中的样子:

ls package*

这是package1: __init__.py __pycache__ package2: __init__.py __pycache__ package3: __init__.py __pycache__ 文件:

root-1.0.dist-info/RECORD

答案 1 :(得分:0)

我觉得让您的开发文件/文件夹结构更接近地代表部署结构更清晰。

这意味着,我将所有三个包放在同一层而不是嵌套它们。

如果您随后希望能够通过其中一个导入所有三个,则可以在单个setup.py文件中设置依赖关系。