ディレクトリからインポートする前に、何百回も sys.path にディレクトリを追加しましたが、そこから何を期待できるかを知っています。私はパッケージや卵の経験があまりありません。
ただし、機能していない特別な (明らかに) ディレクトリがあります。
インポートしようとすると、トレースバックは次のようになります。
Traceback (most recent call last):
File "t", line 17, in <module>
from InfinityUnixHost.activities.ICWrap import ICWrap
File "/home/dstromberg/PycharmProjects/infinity_PY/src/InfinityUnixHost/activities/ICWrap.py",
line 8, in <module>
from InfinityUnixHost.IPGlobal import DB_POOL
File "/home/dstromberg/PycharmProjects/infinity_PY/src/InfinityUnixHost/IPGlobal.py",
line 12, in <module>
INTERNAL_VERSION = pkg_resources.require("InfinityUnixHost")[0].version
File "/home/dstromberg/virtualenvs/dev/local/lib/python2.7/site-packages/pkg_resources/__init__.py",
line 941, in require
needed = self.resolve(parse_requirements(requirements))
File "/home/dstromberg/virtualenvs/dev/local/lib/python2.7/site-packages/pkg_resources/__init__.py",
line 828, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'InfinityUnixHost'
distribution was not found and is required by the application
そして、このエラーを生成する小さなテスト プログラムは次のとおりです。
#!/usr/bin/env python
import sys
import os.path
sys.path.insert(0, os.path.abspath('src'))
sys.path.insert(0, os.path.abspath('eggs/InfinityCore-6-py2.7.egg'))
#for directory in sys.path:
# # print(directory)
# if \
# os.path.exists(os.path.join(directory,
'InfinityUnixHost')) and \
# os.path.exists(os.path.join(directory,
'InfinityUnixHost/activities')) and \
# os.path.exists(os.path.join(directory,
'InfinityUnixHost/activities/ICWrap.py')):
# print('found in %s' % directory)
# from InfinityUnixHost.activities.ICWrap import ICWrap
from InfinityUnixHost.activities.ICWrap import ICWrap
dummy = ICWrap
ところで、コメントアウトされた for ループは、インポートしようとしているファイルを表示できますが (コメントを外した場合)、インポート機構はモジュールをロードしません。
残念ながら、InfinityUnixHost の内部構造について詳細を共有することはできませんが、必要に応じて議論できる可能性があります。
この奇妙な方法でインポートが失敗する理由を誰かが知っていますか? ImportError でさえありません!
ところで、strace までテスト コードを実行したところ、ICWrap.py が開いていることがわかりましたが、インタープリターへの ICWrap.py の読み込みにまだ問題があるようです。
ありがとう!