Python似乎不赞成从不同目录导入的理由是什么?

2024-04-24 13:35:42 发布

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

这可能是一个更广泛的问题,并且与理解Python的本质和良好的编程实践更相关。你知道吗

我有一个文件,叫做util.py。在过去的几个月里,我收集了很多不同的小功能,这些功能在执行各种机器学习任务时非常有用。你知道吗

我的想法是:我想继续在脚本中添加重要的函数。因此,我现在和将来都希望在许多不相关的项目中经常使用import util.py。你知道吗

但是Python似乎觉得只有当这个文件中的代码直接存在于我当前的目录中时,我才能访问它,即使这个文件中的函数对于不同目录中的脚本很有用。我感觉到这种工作方式背后的一些原因,但我没有完全理解;对我来说,似乎我将被迫经常复制不必要的副本。你知道吗

如果每次我在不同的项目中从一个新目录中工作时都必须创建一个新的util.py副本,那么我很快就会有许多不同版本/迭代的文件,这些文件分散在我的硬盘上,处于不同的状态。我不希望在我的编程中实现这种程度的模块化——为了简单、可重复性和清晰性,我只希望在一个位置中有一个文件,可以被许多项目访问。你知道吗

简而言之:Python似乎不赞成从不同目录导入的理由是什么?


Tags: 文件项目函数代码pyimport功能目录
3条回答

如果您的util.py文件包含您在许多不同项目中使用的函数,那么它实际上是一个库,您应该这样打包它,这样您就可以在任何Python环境中用一行(python setup.py install)安装它,并在需要时更新它(Python的打包生态系统有几个功能来跟踪和更新库版本)。你知道吗

另一个好处是,如果你现在正在做其他答案建议的事情,你必须记住手动将util.py放入你的PYTHONPATH(“脏”方式)。如果你试着运行一个程序,但你还没有这样做,你会得到一个神秘的ImportError,这并不能解释太多:它是一个缺少的依赖项吗?程序有误?你知道吗

现在想想如果你以外的人试图运行程序并得到这些错误消息会发生什么。你知道吗

另一方面,如果你有一个库,尝试设置你的程序会用清晰易懂的语言抱怨库丢失或过时,或者(如果你已经采取了适当的步骤)自动下载并安装它,以便一切就绪。你知道吗

在一个相关的主题上,有一个名为“util”的文件/模块/命名空间是设计不好的标志。这些公用设施是做什么用的?它相当于一个“杂项”文件夹的编程:最终,所有的都会在它里面结束,你除了打开它并阅读它之外,没有办法知道它包含了什么。你知道吗

另一种方法是将目录/you/want/to/import/from添加到需要它的脚本中的路径中。 您应该在相同的文件夹中有一个文件\uuu init \uuuuuy.py实用程序.py告诉python把文件夹当作一个包。文件\uu init \uuuy.py可能是空的,或者不是空的,您可以在其中定义其他内容。你知道吗

示例:

/home/marcos/python/proj1/
      __init__.py
      utils.py
/home/marcos/school_projects/final_assignment/
      my_scrpyt.py

然后在我的身体里_脚本.py你知道吗

import sys
sys.path.append('/home/marcos/python/')
from proj1 import utils

MAX_HEIGHT = utils.SOME_CONSTANT
a_value = utils.some_function()

首先,定义一个环境变量。例如,如果您使用的是bash,则将以下内容放入相应的启动文件中:

export PYTHONPATH=/path/to/my/python/utilities

现在,把你的利用率以及该目录中的任何其他通用模块或包。现在您可以从任何地方import util,python都可以找到它。你知道吗

相关问题 更多 >