ped*_*o91 15 python python-import git-submodules
我有一个使用git子模块的项目.在我的python文件中,我想使用子模块项目中另一个python文件的函数.
为了工作,我必须将init .py文件添加到路径中的所有子文件夹.我的文件夹树如下:
myproj
??? gitmodules
? ??? __init__.py
? ??? __init__.pyc
? ??? mygitsubmodule
? ??? __init__.py
? ??? __init__.pyc
? ??? file.py
??? myfile.py
Run Code Online (Sandbox Code Playgroud)
有没有办法让它工作而不触及mygitsubmodule?
谢谢
Kev*_*vin 16
我习惯于避免修改sys.path。
问题是,当使用git submodule 时, submodule 是一个项目目录,而不是一个 Python 包。您的模块与该包之间存在“差距” ,因此您无法导入。
假设你创建了一个名为foo_project的子模块,里面有一个foo包。
.
??? foo_project
? ??? README.rst
? ??? foo
? ??? __init__.py
??? main.py
Run Code Online (Sandbox Code Playgroud)
我的解决方案将创建一个软链接以将该包公开给您的模块:
ln -s foo_project/foo foo
Run Code Online (Sandbox Code Playgroud)
.
??? foo_project
? ??? README.rst
? ??? foo
? ??? __init__.py
??? foo -> foo_project/foo
??? main.py
Run Code Online (Sandbox Code Playgroud)
现在您可以在main.py 中导入foo。
pad*_*dyg 12
您可以在希望能够访问模块的文件中添加sys.path,例如:
import sys
sys.path.append("/home/me/myproj/gitmodules")
import mygitsubmodule
Run Code Online (Sandbox Code Playgroud)
编辑:这个例子是添加一个路径作为原始字符串,以明确发生了什么.您应该使用下面描述的更复杂的,与系统无关的方法来确定和组装路径.
此外,我发现它更好,当我使用这种方法,sys.path.insert(1, ..因为某些功能似乎依赖于sys.path [0]作为程序的起始目录.
| 归档时间: |
|
| 查看次数: |
6684 次 |
| 最近记录: |