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

Pycharm从Git子模块导入

宦瀚
2023-03-14

我在Pycharm中有一个python项目,其中有一个嵌套的Git子模块。以下是文件夹结构:

my-git-repo
    git-submodule-repo
        package1
           foo.py
           bar.py
    package2
        baz.py
    .gitmodules

git子模块repo中的导入结构如下:

foo.py:
from package1.bar import some_func

但是,Pycharm没有意识到这一点,而是希望我拥有以下内容:

foo.py:
from git-submodule-repo.package1.bar import some_func

这是有问题的,因为我不想更改git子模块repo中的所有导入(这似乎不是一个好的实践,也不可扩展),而且git子模块repo中有破折号,这对于导入来说不是有效的Python语法(我无法重命名repo)。

我还需要一种从我的代码中导入git-submodor-repo的方法。像这样的东西:

baz.py:
from git-submodule-repo.package1.bar import some_func

但当然,没有破折号使其语法无效。以下是.gitmodules的内容,以防有用:

[submodule "git-submodule-repo"]
    path = git-submodule-repo
    url = https://github.com/SomeAccount/git-submodule-repo.git

任何帮助都将不胜感激!

共有2个答案

马和硕
2023-03-14

包名称不应包含破折号。

这个问题是由于你的包的命名包含"-"破折号,这在python中是不允许的。所以你永远不能导入git-submodor-repogit-submodor-repo不是一个标识符。重命名子模块为git_submodule_repo,你将能够导入它就像一个普通的包。

所以这与pycharm无关,也与子模块无关。

张岳
2023-03-14

SOUTION 1
通过在首选项中将子模块文件夹标记为源来使用本机PyCharm支持-

解决方案2
查看@Kevin提出的关于从git子模块导入python文件的一般解决方案。您可以在项目根目录中创建指向lib的软链接。在您的情况下,命令将是:
$ln-s git-submodule-repo.package1 package1
然后您将能够从package1.bar导入。从foo.py导入一些函数
这种方法的缺点是它不是跨平台的,例如,如果需要,您将无法从windows运行它信息技术

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

  • 我有一个使用git子模块的项目。在我的python文件中,我想在子模块项目中使用另一个python文件中的函数。 为了工作,我必须将init.py文件添加到路径中的所有子文件夹中。我的文件夹树如下: 有没有办法让它在不接触mygitsubmodule的情况下工作? 谢谢

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

  • 我是PyCharm的新手,很难将我编写的模块导入Python控制台。如果我尝试导入Python自带的模块,我可以毫无困难地导入该模块,但是如果我尝试导入我编写的模块,我会得到一个导入错误:没有名为“ModuleITriedToImportName”的模块。例如,这里有一个简单的自我编写的模块pickle文件称为“文件pickle”: 如果我尝试在PyCharm Python控制台上“导入pickl

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

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