[英]How to import a module that has a dash “-” in its name without renaming it
Python 版本: Python 3.8.5 (default, Sep 4 2020, 02:22:02)
通過 git 子模塊,我得到了一些我想使用的代碼。
存儲庫的名稱是pytorch-balanced-sampler
,可以在這里找到https://github.com/galatolofederico/pytorch-balanced-batch 。
我本質上想使用 repo 中的代碼示例:
train_loader = torch.utils.data.DataLoader(train_dataset, sampler=BalancedBatchSampler(train_dataset), batch_size=30)
我嘗試的第一件事是:
from pytorch-balanced-sampler.sampler import BalancedBatchSampler
但這不起作用。
第二件事是:
from importlib import import_module
pytorch_balanced_sampler = import_module('pytorch-balanced-sampler')
from pytorch_balanced_sampler.sampler import BalancedBatchSampler
和
from importlib import import_module
pytorch_balanced_sampler = import_module('pytorch-balanced-sampler.sampler.py')
from pytorch_balanced_sampler.sampler import BalancedBatchSampler
我收到錯誤消息:
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'pytorch-balanced-sampler'
這不是我第一次遇到這個問題,我想知道是否可以在不重命名存儲庫文件夾的情況下解決這個問題。 我已經嘗試了一些關於堆棧溢出的其他解決方案,但似乎沒有一個有效。
我也願意接受類似__init__
的解決方案來解決這個問題。
我也不想使用,因為它不是最佳實踐:
import sys
sys.path.append('path/to/module')
我的工作目錄如下:
├── README.md
├── environment.yml
├── main.py
├── pytorch-balanced-sampler
│ └── sampler.py
└── src
├── gnn.py
└── rgcn.py
所需的導入發生在 main.py 中。
檢查這是否有效
pytorch_balanced_sampler = __import__("pytorch-balanced-sampler")
您的代碼在由PYTHONPATH
初始化的sys.path
指定的位置找不到pytorch-balanced-sampler
模塊。
所以,
1 - 在您的工作目錄中包含sampler.py
模塊,然后from sampler import BalancedBatchSampler
2 - 如果您有模塊的特定位置,則在PYTHONPATH
或通過sys.path
添加此模塊的位置。
編輯:
Python 名稱不應包含“-”(連字符),但如果您想堅持使用相同的名稱,您需要執行以下操作:
1 - 在pytorch-balanced-batch
文件夾中包含__init__.py
以使其成為 package。
2 - 將以下行添加到main.py
文件的頂部:
import importlib
sampler_module = importlib.import_module('pytorch-balanced-batch.sampler', package='pytorch-balanced-batch')
然后你可以這樣做:
sampler = sampler_module.BalancedBatchSampler(train_dataset), batch_size=30)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.