相对路径中框架中的setuptools捆绑包

2024-09-30 18:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

项目设置如下所示:

---------------------
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\u dir设置这些包的位置

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

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

理想情况下,我希望软件包按如下方式工作,并从pip安装,以便运行以下程序:

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

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

是否有办法将框架设置为在“../../../”中找到,但安装到发行版的根目录中


Tags: 文件pyimportsrcpackageinitasdir
1条回答
网友
1楼 · 发布于 2024-09-30 18:31:04

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

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

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

其次,您可以:

  • 如果框架包在其他地方使用:分别对待每个包。这将允许您单独地对它们进行演化,并通过简单地将它们包含在requirements.txt(或等价物)中,将它们添加到MyApp。这其中的一个缺点是每个都有自己的setup.py,但这是一个much better packaging practice
  • 如果框架包未在其他地方使用(或者您只需要本地副本):切换到项目设置,将setup.py直接放在主文件夹(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
          -

相关问题 更多 >