(py) 你如何管理通用模块? [关闭]

问题描述 投票:0回答:0

我只是在思考我的可能改进见标题

为了这个问题,我只想说说我目前的情况,但我想指出我不是在寻找错误或解决我的具体情况,因为我知道它可能(而且可能必须)改变;

主要问题是你们如何使用随机的东西管理您的主要模块

故事例子,可以跳过

比方说,我们正在启动一个包项目,编写一些代码,我们最终得到 3 个 python 文件,例如:

logic.py
main.py
generalStuff.py

也许这是一个包,所以在经历了一些麻烦、错误和命名空间无效之后,您可能会得到这样的模式

PackName/
    ... # files for setup, like setup.py/setup.cfg , PackName.toml, ecc..
    src/
        __init__.py  # with wroted inside: __all__ = ["logic", "main", "generalStuff"]
        logic.py
        main.py
        generalStuff.py

我们注意到在 generalStuff.py 里面我们有可以在许多其他项目中使用的代码,因为它与这个特定项目没有严格的关系,所以我们决定他可以是一个独立的包,所以我们将它从 PackName/src 中删除/ 并为其创建一个同名包

generalStuff/
    ... # files for setup, like setup.py/setup.cfg , PackName.toml, ecc..
    src/
        __init__.py
        generalStuff.py

这里我们遇到了第一个问题,现在我如何获得对 generalStuff 的访问权? 好吧,简单的做

pip install Path\to\PackName    # maybe even with --editable , super comfort, but hey, you know how it really works?

在我们的本地机器上安装我们制作的包(但不是构建*)

我们甚至可以决定将其上传到 github 之类的地方并执行 pip install url

但是,我们必须意识到现在这些包在我们本地机器上的事实,所以如果另一台机器试图使用我们的包将很难弄清楚如何捕获子模块, 所以我们必须正确设置我们的应用程序和我们的 Requirement.txt

好吧,这不是什么大问题..但现在请考虑两个简单的因素

  1. 可能我们数百次都遇到了 generalStuff 的相同情况,在这些打乱的包中可能有数千个通用代码,其中大部分依赖于其他代码;

  2. 如果我们从 python 构建一个应用程序,我敢打赌最后我们的脚本只是在一个由 pyinstaller 制作的可执行文件中完成

所以现在如果我们以前不关心这个,我们将所有这些包都放在主要的 python 站点中,因为谁不知道 pyinstaller 有一个特定的“功能”,它会自动在您的工作环境中安装每个包(即主要的 python 站点)或 venv 网站,如果活跃)

不,你不能选择你想要的,全部或都不选择(实际上你可以 --esclude)

现在,我们可以开始收拾残局,做我们一开始就应该做的事情:

python -m venv /path/to/new/virtual/environment # see below for info

虚拟环境指南

虚拟环境的使用允许我们只安装我们需要的包,并在虚拟环境 shell 中构建我们的可执行文件:

pyinstaller <ScriptName> <options, ...>

pyinstaller 指南

aa,我们完成了!一切都很好,也许有点混乱但是嘿,如果工作就好了。

... 等等,你是认真的吗?我应该创建数百个虚拟环境吗?

嗯..先生,你的观点很好

如果你遇到了一些这样的问题,请告诉大家(很抱歉说了这么长的故事)

------------------------------------------------ --------------------------

*未构建:指的是我们的包仍然处于“人类可读”的形式;

构建包后,将其翻译成二进制形式,通常通过以下方式完成:

py -m build  

路径目录内

建立官方页面

setuptools指南#这个非常推荐

github pyinstaller python-packaging python-venv
© www.soinside.com 2019 - 2024. All rights reserved.