簡體   English   中英

如何從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

有沒有辦法讓它在不接觸 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM