Pycharm 从 Git 子模块导入

8

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

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

在 `git-submodule-repo` 中的导入结构如下:
foo.py:
from package1.bar import some_func

然而,Pycharm无法识别此内容,因此我需要改为以下内容:
foo.py:
from git-submodule-repo.package1.bar import some_func

这很有问题,因为我不想改变git-submodule-repo中的所有导入(这似乎不是好的实践,并且不可扩展),而且git-submodule-repo中有横杠,这在Python中不是有效的导入语法(我不能重命名该repo)。
我还需要一种从我的代码中导入git-submodule-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个回答

2
解决方案1
使用PyCharm本地支持,将子模块文件夹标记为Preferences -> Project -> Project Structure中的Sources。这种方法的缺点是,除非您使用PyCharm远程解释器选项(仅适用于PyCharm专业版),否则无法在没有PyCharm的情况下运行代码(例如从远程服务器上的终端)。 解决方案2
查看@Kevin提出的关于从git子模块导入python文件的通用解决方案(链接)。您可以在项目根目录中创建对所需库的软链接。在您的情况下,命令将是:$ ln -s git-submodule-repo.package1 package1,然后您就可以从foo.py中使用from package1.bar import some_func进行导入。这种方法的缺点是它不是跨平台的,例如,在需要时,您将无法从Windows运行它。

0

你的包名称不应该包含破折号“-”。

问题是由于你的包名中包含了 python 不允许的“-”破折号。因此,你永远无法导入git-submodule-repogit-submodule-repo不是一个标识符。将子模块重命名为git_submodule_repo,你就能像普通包一样导入它了。

因此,这与 pycharm 和子模块无关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接