簡體   English   中英

如何在不重命名的情況下導入名稱中帶有破折號“-”的模塊

[英]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.

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