【问题标题】:setuptools - bundle package from framework from relative pathsetuptools - 从相对路径的框架捆绑包
【发布时间】:2020-11-05 01:19:40
【问题描述】:

项目设置如下:

---------------------
root
   FrameworkPackage1
      __init__.py
     sourcefile1.py

   FrameworkPackage2
      __init__.py
      sourcefile2.py
   apps
       Project
           src
               MyApp
                   __init__.py
                   __main__.py
           setup.py
           README.md
---------------------

当我创建 setup.py 时,据我了解,我使用 package_dir 来设置这些包的位置。

---------------------
    packages=['MyApp', 'FrameworkPackage1', 'FrameworkPackage2'],
    package_dir={'': 'src',
                 'FrameworkPackage1': '../../FrameworkPackage1',
                 'FrameworkPackage2': '../../FrameworkPackage2'}
---------------------

所以这正确地构建了一个包含所有必需文件的包。但是,当我尝试安装时,它会失败,如果我只是尝试解压缩/gz 包文件,它会将 FrameworkPackage1/2 放在解压缩发生的“../../..”目录中。

理想情况下,我希望包按如下方式工作并从 pip 安装,这样我就可以运行以下命令:

import MyApp as ma
import FrameworkPackage1 as fp1
import FrameworkPackage2 as fp2

print(ma.Function())
print(fp1.OtherFunction())
print(fp2.OtherFunction())

有没有办法将框架设置在“../../../”中但安装到发行版的根目录中?

【问题讨论】:

  • 看看这个答案是否对你有帮助stackoverflow.com/a/17179022/4619142,你可能做错了什么。
  • 你不应该做'FrameworkPackage1': '../../FrameworkPackage1'吗?我的意思是../../../ 带你到root 的父目录。还是你的目录布局显示有问题?
  • 是的!对不起..这是我的例子中的一个错误。我现在将编辑 + 更新

标签: python package setuptools


【解决方案1】:

首先,正如@a_guest 所建议的,package_dir 不应该是这样的吗?

packages=['MyApp', 'FrameworkPackage1', 'FrameworkPackage2'],
package_dir={'': 'src',
             'FrameworkPackage1': '../../FrameworkPackage1',
             'FrameworkPackage2': '../../FrameworkPackage2'}

或者,您可以尝试将__init__.py 添加到root 文件夹,以便将其识别为python 文件夹(基于this question

其次,您可以:

  • 如果在其他地方使用了框架包:分别处理每个包。这将允许您单独发展它们,并将它们添加到您的MyApp,只需将它们包含在requirements.txt(或等效项)中即可。缺点是每个都有自己的 setup.py,但这是一个 much better packaging practice
  • 如果框架包没有在其他地方使用(或者您只想要本地副本):直接在主文件夹(package_dir={'': 'src', 'FrameworkPackage1': 'src', 'FrameworkPackage2': 'src'},结构看起来像:
---------------------
...
       Project
           src
               MyApp
                   __init__.py
                   __main__.py
               FrameworkPackage1
                   __init__.py
                   sourcefile1.py
               FrameworkPackage2
                   __init__.py
                   sourcefile2.py
           setup.py
           README.md
---------------------

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2016-03-05
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2019-08-11
    • 2014-11-06
    相关资源
    最近更新 更多