gpt4 book ai didi

python - setuptools - 从相对路径从框架 bundle

转载 作者:行者123 更新时间:2023-12-03 19:08:49 24 4
gpt4 key购买 nike

项目设置如下:

---------------------
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())
有没有办法设置要在“../../../”中找到的框架但安装到发行版的根目录中?

最佳答案

首先,正如@a_guest 所建议的,不应该是 package_dir看起来像这样?

packages=['MyApp', 'FrameworkPackage1', 'FrameworkPackage2'],
package_dir={'': 'src',
'FrameworkPackage1': '../../FrameworkPackage1',
'FrameworkPackage2': '../../FrameworkPackage2'}
或者,您可以尝试添加 __init__.pyroot文件夹,以便将其识别为 python 文件夹(基于 this question )
其次,您可以:
  • 如果框架包在别处使用 : 分别对待每个包裹。这将允许您分别进化它们,并将它们添加到您的 MyApp 中。只需将它们包含在 requirements.txt 中(或等价物)。这样做的一个缺点是每个人都有自己的 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
    ---------------------

    关于python - setuptools - 从相对路径从框架 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62916622/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com