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

如何从git子模块导入python文件

钮长恨
2023-03-14

我有一个使用git子模块的项目。在我的python文件中,我想在子模块项目中使用另一个python文件中的函数

为了工作,我必须将init.py文件添加到路径中的所有子文件夹中。我的文件夹树如下:

myproj
├── gitmodules
│   ├── __init__.py
│   ├── __init__.pyc
│   └── mygitsubmodule
│       ├── __init__.py
│       ├── __init__.pyc
│       └── file.py
└── myfile.py

有没有办法让它在不接触mygitsubmodule的情况下工作?

谢谢

共有3个答案

危阳
2023-03-14

作为参考,

       from submodulefolder.file import func_name   

或者

       import submodulefolder.file as lib_name

其中file排除了file.py的扩展名,似乎在相对的条件下工作,而不修改子文件夹/git子模块与Python 3.3以来的init.py,如图所示。

在py3.8.5 linux本机和py3.7.8 anaconda Windows上进行测试,这两种Windows都在Spyder的Ipython控制台上进行测试,也可以通过终端在linux本机上进行测试。

百里锋
2023-03-14

我习惯于避免修改sys.path。

问题是,当使用git子模块时,子模块是一个项目目录,而不是Python包。你的模块和那个包之间有一个“缺口”,所以你不能导入。

假设您已经创建了一个名为foo_project的子模块,其中有一个foo包。

.
├── foo_project
│   ├── README.rst
│   └── foo
│       └── __init__.py
└── main.py

我的解决方案是创建一个软链接,将该包公开给您的模块:

ln -s foo_project/foo foo
.
├── foo_project
│   ├── README.rst
│   └── foo
│       └── __init__.py
├── foo -> foo_project/foo
└── main.py

现在可以在main.py中导入foo。

冀弘厚
2023-03-14

您可以添加到您希望能够访问模块的文件中的sys.path,例如:

import sys
sys.path.append("/home/me/myproj/gitmodules")
import mygitsubmodule

本例将添加一个路径作为原始字符串,以明确发生了什么。您应该真正使用下面描述的更复杂、独立于系统的方法来确定和组装路径。

另外,当我使用此方法时,我发现使用sys.path.insert(1,…更好,因为一些功能似乎依赖于sys.path[0]作为程序的起始目录。

 类似资料:
  • 我在Pycharm中有一个python项目,其中有一个嵌套的Git子模块。以下是文件夹结构: 中的导入结构如下: 但是,Pycharm没有意识到这一点,而是希望我拥有以下内容: 这是有问题的,因为我不想更改中的所有导入(这似乎不是一个好的实践,也不可扩展),而且中有破折号,这对于导入来说不是有效的Python语法(我无法重命名repo)。 我还需要一种从我的代码中导入的方法。像这样的东西: 但当然

  • 我有一个这样的目录: 我可以这样导入父模块: 那么,既然我已经有了父模块,那么获取子模块的最佳方法是什么?我已经尝试了,,等。 有什么建议吗? 谢谢

  • 问题内容: 我想将子文件夹导入为模块。因此,每个子文件夹都包含一个。我的文件夹结构是这样的: 在我的主脚本中,我导入 在此工厂文件中,我包括以下子模块: 如果我调用我的foofactory会收到错误消息,则该python无法导入子模块foo1和foo2: 问题答案: 无需与您或此处混淆。 为了在包中正确使用绝对导入,您还应该包括“ root”包名,例如: 或者您可以使用相对导入:

  • (我意识到在与python相对导入相关的StackOverflow上有很多问题;我也怀疑我做得完全错误;但不管怎样,还是这样吧……) 我有一个python项目(mysubmod)组织如下: 重要的是: /models/hello.py导入lib.foobar 然后我有了第二个项目(myproj),我将mysubmod作为git子模块导入其中;myproj现在组织如下- 哪里: scripts/te

  • 当我以我认为应该做的方式从子模块导入时,我会得到一个。 我有以下套餐: cow.py: components.py: 而是空的。 我很难把东西放在正确的地方,或者很难正确地组织它们。当,从pkg目录,我尝试 我得到"重要错误:不能导入名称ftdle" 从子模块中排列文件和导入的正确方法是什么?我已经阅读了如何从git子模块导入python文件;我尝试了在组件/__init__. py和cow.py

  • 问题内容: 我经历了许多Python相对导入问题,但是我无法理解该问题/无法正常工作。 我的目录结构是: 当我尝试运行时: 我得到错误 问题答案: 之所以发生这种情况,是因为就Python而言,它们是独立的,无关的软件包。 在与该目录相同的目录中创建一个目录,一切都会按预期进行。