gpt4 book ai didi

用于管理和使用用户创建的共享库的 Pythonic 方式

转载 作者:行者123 更新时间:2023-12-01 04:07:52 25 4
gpt4 key购买 nike

tl;dr 我在各个项目目录之外有一个公共(public)文件目录。在我的项目中使用/导入这些通用文件并将它们构建到输出目录中的Pythonic方式是什么。

背景:我正在学校上一门使用 Python 作为语言的数据结构类(class)。我一边上课一边学习语言,但在尝试维护共享代码库时遇到了一些问题。

在我使用过的所有其他语言中,无论是编译语言还是解释语言,都有一种相当直观的方法可以将共享模块与使用它们的代码分开,这样就不会更新共享模块需要更新调用代码。

这就是我最初组织目录结构的方式。

/.../Projects
Assignment_1
__init__.py
classA.py
classB.py
Assignment_2
__init__.pu
classC.py
(etc)

在意识到稍后需要 classA 和 classB 的大部分功能后,我重新组织为:

/.../Projects
Common
Sorters
__init__.py
BubbleSort.py
MergeSort.py
__init__.py
SimpleProfiler.py
Assignment_1
__init__.py
main.py
Assignment_2
__init__.py
main.py

我的问题是我找不到从 main,py 导入 SimpleProfiler 或 MergeSort 等内容的好方法。现在我手动将所有公共(public)文件复制到每个作业中,这很糟糕。

我知道一种可能的解决方案是更新路径以在每个 main.py 文件中包含公共(public)文件夹表单,但我也了解到这是非常 hacky 的,不鼓励这样做。

Stackoverflow 对类似问题的另一个回答建议用户在一个大型项目下构建所有内容。我尝试了此操作,但仍然无法将模块从一个同级导入到另一个同级。

我的另一个问题是如何在提交作业时将所有内容打包在一起。在其他语言中,很容易实现一个构建脚本,该脚本将扫描主项目中的任何导入,然后将这些导入的文件复制(展平)到单个输出目录中,然后我可以压缩并提交以进行评分。我正在使用 PyCharm,但似乎找不到一种方法来引用导入作为构建过程的一部分。有没有这样的脚本?无论解决方案是什么,我都需要能够以这样的方式提交项目:教师所要做的就是调用单个 python 文件(例如 main.py)

这个问题并不是学校独有的,但对于大多数编程项目来说似乎都是普遍存在的。那么,管理共享代码库并将共享代码构建到最终项目中的 Python 方式是什么?

最佳答案

[免责声明:我认为使用 PYTHONPATH 环境变量更好]

我想到了两种非常相似的替代方案:

/.../Projects
Common
Sorters
__init__.py
BubbleSort.py
MergeSort.py
__init__.py
SimpleProfiler.py
assignment_1.py
assignment_2.py

如果您使用assignment_1.py中的以下导入:from Common.Sorters.BubbleSort import bubble_sort。这是因为,默认情况下,PYTHONPATH 将当前路径视为有效的 PYTHONPATH。这是假设您直接调用脚本 assignment_*

另一种选择是:

/.../Projects
Common
Sorters
__init__.py
BubbleSort.py
MergeSort.py
__init__.py
SimpleProfiler.py
Assignment_1
__init__.py
__main__.py
Assignment_2
__init__.py
__main__.py

并像这样调用作业:python -mAssignment_1(来自Projects文件夹)。默认情况下,“执行”这样的模块将加载其 __main__.py 代码。 (这不是一个严格的解释,尽管 the official one 有点短)。

它的工作原理与以前相同:Python 解释器会将当前路径视为有效的 PYTHONPATH。

关于用于管理和使用用户创建的共享库的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35334903/

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