当前位置: 首页 > 知识库问答 >
问题:

python - 如何在Python中处理距离较远的两个项目包并相互导入?

郑茂勋
2024-05-27

如何处理两个离的距离很远的python package?
比如A项目在/a/b/c/A_project而B项目在/aa/bb/cc/dd/B_project,文件离的很远,但是需要相互import包。
问题是A、B 2个 project都很大,移动起来非常费劲,但是又需要相互的包,这种情况如何是好?

可以尝试sys.path.append(B_project_path),这样运行没问题,但是无法方便的ctrl+左键点击进入类。

是否有更好的方法?

共有1个答案

孙修贤
2024-05-27

在Python中处理距离较远的两个项目包并相互导入,确实可以通过修改sys.path来实现,但这确实会影响到IDE的自动跳转和提示功能。一个更好的解决方案是将这两个项目都作为可安装的Python包来处理,这样无论它们位于文件系统的哪个位置,都可以通过Python的包管理机制来导入。

以下是一些步骤来实现这一点:

  1. 将项目转换为Python包
* 为每个项目创建一个`setup.py`文件(或使用`pyproject.toml`和`poetry`等现代包管理工具)。* 确保每个项目的目录结构都遵循Python包的规范,即包含一个`__init__.py`文件(对于Python 3.3及以上版本,空文件夹也可以作为包,但`__init__.py`仍然有助于明确包的边界)。
  1. 安装项目
* 使用`pip install -e .`在开发模式下安装每个项目。这会将项目链接到它们的源代码,这样任何对源代码的更改都会立即反映到已安装的包中。* 或者,你可以将项目打包为分发格式(如wheel或sdist),然后安装这些分发包。
  1. 在代码中导入
* 一旦项目被安装为Python包,你就可以像导入任何其他Python包一样导入它们,无论它们在文件系统中的位置如何。
  1. IDE支持
* 大多数现代IDE(如PyCharm、VSCode等)都支持Python的包管理机制,并能正确识别已安装的包。这意味着你应该能够在IDE中使用ctrl+左键点击进入类和其他定义。
  1. 版本控制
* 将你的项目包上传到版本控制系统(如Git),这样其他开发者也可以轻松地克隆和安装它们。
  1. 文档和依赖管理
* 在`setup.py`或`pyproject.toml`中列出项目的依赖项,这样其他开发者在安装项目时也会自动安装这些依赖项。* 为项目编写文档,说明如何安装和使用它们。

通过这种方法,你可以确保项目的导入和依赖管理都是清晰和可维护的,同时也不会影响IDE的功能。

 类似资料:
  • 问题内容: 我想获取两个列表并查找两个列表中都出现的值。 [5]例如,将返回。 问题答案: 使用,它快速且可读。

  • 然而,由于某些原因,所有这些按钮都相距很远,我不太确定它们的确切位置是由什么逻辑决定的。这是我的代码,用于设置窗口和按钮: 如果有人能告诉我为什么以及如何让按钮和字段离得更近,我将不胜感激。

  • 我有两个数组: 我需要编写一个方法,该方法返回array1中元素的数组,该数组在字符串项中包含array2中的任何项。因此该方法应该返回: 我尝试了,但它只返回array1。我该怎么办?

  • 问题内容: 想象一下这个目录结构: 我正在编码,我需要从中导入一些东西。我该怎么办? 我尝试过,但是得到了“未打包的相对导入尝试”。 我四处搜寻,但只发现骇客。有没有一种干净的方法? 问题答案: 每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。 问题是你通过将作为参数传递给解释器而将模块作为运行。 从PEP 328: 相对导入使用模块的属性来确定该模块在包层次结构中的位置。如果模块的名称不包含

  • 问题内容: 在Python + Sqlite中是否有可用的字符串相似性度量,例如与模块有关? 用例示例: 此查询应匹配ID为1的行,但不匹配ID为2的行: 如何在Sqlite + Python中做到这一点? 关于我到目前为止发现的注释: 该Levenshtein距离,即单字符编辑(插入,删除或替换)的最小数量需要改变一个字到另一个,可能是有用的,但我不知道是否SQLite中存在的正式实施(我看到一

  • 我想写一个函数来计算中的坐标与中的每个坐标之间的欧氏距离,并通过列生成维度行的距离数组(其中是中的坐标数,是中的坐标数)。 NB:为了简单起见,我不想使用任何其他库。 运行该函数将生成: 我一直在试着运行下面的程序 但我得到以下错误: 非常感谢。