[英]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
有沒有辦法讓它在不接觸 mygitsubmodule 的情況下工作?
謝謝
你可以在你希望能夠訪問模塊的文件中添加到sys.path
,例如:
import sys
sys.path.append("/home/me/myproj/gitmodules")
import mygitsubmodule
此示例將路徑添加為原始字符串以明確發生的情況。 您確實應該使用下面描述的更復雜的、獨立於系統的方法來確定和組合路徑。
另外,當我使用這種方法時,我發現使用sys.path.insert(1, ..
更好,因為某些功能似乎依賴於sys.path[0]
作為程序的起始目錄。
我習慣於避免修改sys.path 。
問題是,當使用git submodule 時, submodule 是一個項目目錄,而不是一個 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 。
以供參考,
from submodulefolder.file import func_name
或者
import submodulefolder.file as lib_name
其中, file
中不包括擴展file.py
,似乎相對來說工作,而無需修改的子文件夾/ git的子模塊與初始化的.py因為Python 3.3+ ,如圖所示這里。
在 py3.8.5 linux native 和 py3.7.8 anaconda Windows 上測試,都在 Spyder 的 Ipython-console 中,以及通過終端在 linux 上本地測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.