2

私は、C で書かれた一連の拡張モジュールを含む「lehmer」という名前の Python パッケージに取り組んでいます。現在、単一の拡張モジュール「rng」があります。モジュールのビルドとインストールに Python の Distutils を使用しています。import lehmer.rngモジュールをコンパイルしてインストールできますが、またはを使用してモジュールをインポートしようとするとfrom lehmer import rng、Python インタープリターがImportError例外をスローします。「lehmer」を正常にインポートできます。

私のsetup.pyファイルの内容は次のとおりです。

from distutils.core import setup, Extension

exts = [Extension("rng", ["lehmer/rng.c"])]

setup(name="lehmer",
      version="0.1",
      description="A Lehmer random number generator",
      author="Steve Park, Dave Geyer, and Michael Dippery",
      maintainer="Michael Dippery",
      maintainer_email="mpd@cs.wm.edu",
      packages=["lehmer"],
      ext_package="lehmer",
      ext_modules=exts)

Python のsite-packagesディレクトリの内容を一覧表示すると、次のように表示されます。

th107c-4 lehmer $ ls /scratch/usr/lib64/python2.5/site-packages/lehmer
__init__.py  __init__.pyc  rng.so*

私のPYTHONPATH環境変数は正しく設定されているので、それは問題ではありません (また、前に述べたように、私は問題なく動作するので、それが問題ではないimport lehmerことはわかっPYTHONPATHいます)。Python は次の検索パスを使用します (報告によるとsys.path):

['', '/scratch/usr/lib64/python2.5/site-packages', '/usr/lib/python25.zip', '/usr/lib64/python2.5', '/usr/lib64/python2.5/plat-linux2', '/usr/lib64/python2.5/lib-tk', '/usr/lib64/python2.5/lib-dynload', '/usr/lib64/python2.5/site-packages', '/usr/lib64/python2.5/site-packages/Numeric', '/usr/lib64/python2.5/site-packages/PIL', '/usr/lib64/python2.5/site-packages/SaX', '/usr/lib64/python2.5/site-packages/gtk-2.0', '/usr/lib64/python2.5/site-packages/wx-2.8-gtk2-unicode', '/usr/local/lib64/python2.5/site-packages']

アップデート

OpenSUSE 10 ボックスで使用すると機能しますが、Mac OS X でテストした場合、C 拡張機能はまだロードできません。Python インタープリターの結果は次のとおりです。

>>> sys.path
['', '/usr/local/lib/python2.5/site-packages', '/opt/local/lib/python25.zip', '/opt/local/lib/python2.5', '/opt/local/lib/python2.5/plat-darwin', '/opt/local/lib/python2.5/plat-mac', '/opt/local/lib/python2.5/plat-mac/lib-scriptpackages', '/opt/local/lib/python2.5/lib-tk', '/opt/local/lib/python2.5/lib-dynload', '/opt/local/lib/python2.5/site-packages']
>>> from lehmer import rng
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name rng
>>> import lehmer.rngs
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named rngs
>>> import lehmer.rng 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named rng
>>> from lehmer import rngs
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name rngs
4

1 に答える 1

4

記録のために(そして、これが未回答としてマークされているのを見るのにうんざりしているため)、ここに問題がありました:

  1. 現在のディレクトリは Python パッケージ パスに自動的に追加されるため、インタープリターは最初に現在のディレクトリでパッケージを検索していました。一部の C モジュールは現在のディレクトリでコンパイルされていないため、インタープリターはそれらを見つけることができませんでした。解決策:コードの作業コピーが保存されているディレクトリからインタープリターを起動しないでください。
  2. Distutils は、OS X に正しいパーミッションでモジュールをインストールしませんでした。解決策:パーミッションを修正します。
于 2009-01-12T16:41:37.177 に答える