-1

やること

import itertools

動的に、私は次のことができます

import importlib
importlib.import_module('itertools')

しかし、次のことを動的に行うにはどうすればよいですか

import itertools as iters

問題のコンテキスト:

デフォルトのバージョン(0.9)ではなく、別のディレクトリにインストールされたモジュール(私の場合は「pika」)の別のバージョン(0.10)をインポートする必要があります。

Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Welcome to Python !!
>>> import importlib
>>> import pika
>>> pika.__version__
'0.9.14'
>>> import scale.lib.hypervisor.esx65.pika_3_5 as pika35
>>> pika35.__version__
'0.10.0'
>>> importlib.import_module('scale.lib.hypervisor.esx65.pika_3_5')
<module 'scale.lib.hypervisor.esx65.pika_3_5' from 'scale/lib/hypervisor/esx65/pika_3_5/__init__.pyc'>

ご覧のとおり、通常のインポートは正常に機能しています。ただし、動的にインポートする場合、場所を基準にしてインポートすると問題が発生します。importlib.import_module のドキュメントに従って、以下は機能するはずですが、機能しません。

>>> importlib.import_module('pika_3_5', 'scale.lib.hypervisor.esx65')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named pika_3_5

また、相対パスの下にモジュール pika がないため失敗するはずの相対パスから 'pika' をインポートしようとすると、まだデフォルト モジュールからインポートされています。

>>> importlib.import_module('pika', 'scale.lib.hypervisor.esx65.pika_3_5')
<module 'pika' from '/usr/local/lib/python2.7/dist-packages/pika/__init__.pyc'>
>>>

私が見逃しているのは何ですか?私は主に次のことを動的に行いたいと考えています。

import scale.lib.hypervisor.esx65.pika_3_5 as pika
4

1 に答える 1