如何从 git 子模块导入 python 文件
How to import python file from git submodule
我有一个使用 git 子模块的项目。在我的 python 文件中,我想使用子模块项目中另一个 python 文件中的函数。
为了工作,我必须将 init.py 文件添加到路径中的所有子文件夹。我的文件夹树如下:
myproj
├── gitmodules
│ ├── __init__.py
│ ├── __init__.pyc
│ └── mygitsubmodule
│ ├── __init__.py
│ ├── __init__.pyc
│ └── file.py
└── myfile.py
有什么方法可以让它在不触及我的git子模块的情况下工作吗?
谢谢
你可以在你希望能够访问模块的文件中添加到 sys.path
,例如:
import sys
sys.path.append("/home/me/myproj/gitmodules")
import mygitsubmodule
此示例将路径添加为原始字符串,以明确发生了什么。您真的应该使用下面描述的更复杂、系统独立的方法来确定和 assemble 路径。
此外,当我使用此方法时,我发现使用 sys.path.insert(1, ..
更好,因为某些功能似乎依赖于 sys.path[0]
作为程序的起始目录。
我习惯避免修改sys.path.
问题是,当使用git 子模块 时,子模块是项目目录,而不是Python 包。 你的模块和那个包之间有一个"gap",所以你不能导入。
假设你创建了一个名为foo_project的子模块,里面有一个foo包。
.
├── foo_project
│ ├── README.rst
│ └── foo
│ └── __init__.py
└── main.py
我的解决方案是创建一个 soft link 以将该包公开给您的模块:
ln -s foo_project/foo foo
.
├── foo_project
│ ├── README.rst
│ └── foo
│ └── __init__.py
├── foo -> foo_project/foo
└── main.py
现在您可以在 main.py.
中导入 foo
供参考,
from submodulefolder.file import func_name
或
import submodulefolder.file as lib_name
其中 file
排除了 file.py
的扩展名,似乎在不修改子文件夹 / git 子模块的情况下工作 ,
如图所示 here.
在 py3.8.5 linux native 和 py3.7.8 anaconda Windows 上测试,都在 Spyder 的 Ipython-console 中,以及在 linux 上通过 terminal.
我有一个使用 git 子模块的项目。在我的 python 文件中,我想使用子模块项目中另一个 python 文件中的函数。
为了工作,我必须将 init.py 文件添加到路径中的所有子文件夹。我的文件夹树如下:
myproj
├── gitmodules
│ ├── __init__.py
│ ├── __init__.pyc
│ └── mygitsubmodule
│ ├── __init__.py
│ ├── __init__.pyc
│ └── file.py
└── myfile.py
有什么方法可以让它在不触及我的git子模块的情况下工作吗?
谢谢
你可以在你希望能够访问模块的文件中添加到 sys.path
,例如:
import sys
sys.path.append("/home/me/myproj/gitmodules")
import mygitsubmodule
此示例将路径添加为原始字符串,以明确发生了什么。您真的应该使用下面描述的更复杂、系统独立的方法来确定和 assemble 路径。
此外,当我使用此方法时,我发现使用 sys.path.insert(1, ..
更好,因为某些功能似乎依赖于 sys.path[0]
作为程序的起始目录。
我习惯避免修改sys.path.
问题是,当使用git 子模块 时,子模块是项目目录,而不是Python 包。 你的模块和那个包之间有一个"gap",所以你不能导入。
假设你创建了一个名为foo_project的子模块,里面有一个foo包。
.
├── foo_project
│ ├── README.rst
│ └── foo
│ └── __init__.py
└── main.py
我的解决方案是创建一个 soft link 以将该包公开给您的模块:
ln -s foo_project/foo foo
.
├── foo_project
│ ├── README.rst
│ └── foo
│ └── __init__.py
├── foo -> foo_project/foo
└── main.py
现在您可以在 main.py.
中导入 foo供参考,
from submodulefolder.file import func_name
或
import submodulefolder.file as lib_name
其中 file
排除了 file.py
的扩展名,似乎在不修改子文件夹 / git 子模块的情况下工作
在 py3.8.5 linux native 和 py3.7.8 anaconda Windows 上测试,都在 Spyder 的 Ipython-console 中,以及在 linux 上通过 terminal.