1

私は自分のマシンでこれを機能させようとしています(アーチ、gnome 3を使用)。セットアップはうまくいったと思います (すべての印刷コマンドを置き換えました) が、chemlabターミナルで実行すると、コア パッケージがないというエラーが表示されます。

[yotam@Standing chemlab-master]$ chemlab
Traceback (most recent call last):
  File "/usr/bin/chemlab", line 5, in <module>
    pkg_resources.run_script('chemlab==0.2', 'chemlab')
  File "/usr/lib/python3.3/site-packages/pkg_resources.py", line 505, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python3.3/site-packages/pkg_resources.py", line 1246, in run_script
    exec(compile(open(script_filename).read(), script_filename, 'exec'), namespace, namespace)
  File "/usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/EGG-INFO/scripts/chemlab", line 4, in <module>
    import chemlab as cl
  File "/usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/chemlab/__init__.py", line 1, in <module>
    from core.molecule import Molecule, Atom
ImportError: No module named 'core'
[yotam@Standing chemlab-master]$ ls /usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/chemlab/
__init__.py  contrib/     db/          io/          libs/        resources/   
__pycache__/ core/        graphics/    ipython.py   molsim/      utils/       
[yotam@Standing chemlab-master]$ ls /usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/chemlab/

そのため、ファイルをローカルで実行しようとしました。適切なフォルダーに移動して実行しましたpython __init__.pyNo I get

[yotam@Standing chemlab]$ python __init__.py
Traceback (most recent call last):
  File "__init__.py", line 1, in <module>
    from core.molecule import Molecule, Atom
  File "/home/yotam/Applications/Chemlab/chemlab-master/chemlab/core/__init__.py", line 1, in <module>
    from .molecule import Molecule, Atom
  File "/home/yotam/Applications/Chemlab/chemlab-master/chemlab/core/molecule.py", line 6, in <module>
    from ..libs.ckdtree import cKDTree
ValueError: attempted relative import beyond top-level package
[yotam@Standing chemlab]$ 

少し調べてみたところ、..libs.ckdtree import cKDTreeI chemlab.libs.ckdtree import cKDTreedid so only to get に置き換えることができる (すべきか?) ことがわかりました

トレースバック (最新の呼び出しが最後): ファイル ""、行 1、ファイル "./core/ init .py"、行 1、in from .molecule import Molecule、Atom ファイル "./core/molecule.py"、行6, chemlab.libs.ckdtree import cKDTree File "/usr/lib/python3.3/site-packages/chemlab-0.2-py3.3-linux-i686.egg/chemlab/init.py "から 1 行目, in from core.molecule import Molecule, Atom ImportError: 名前 Molecule をインポートできません

それは私を困惑させます。これをインポート/実行するにはどうすればよいですか?

編集: フォルダ構造:

chemlab
|
|
+  __init__.py
+  core
   |
   |
   +  molecule.py

編集 2: chemlab/__init__.py行のみが core.molecule import Molecule, Atom からのものです

および chelab/core/molecule/ import セクションは次のようになります

import numpy as np
from collections import Counter
import numpy as np
from copy import copy

from ..libs.ckdtree import cKDTree
from ..db import ChemlabDB
cdb = ChemlabDB()

masses = cdb.get("data", "massdict")

from .attributes import MArrayAttr, MField
from .fields import AtomicField, FieldRequired
from .serialization import data_to_json, json_to_data
4

1 に答える 1

0

循環依存関係があります。しかし、それはあなたchemlab.__init__.pyがインポートしたいことが原因core.molecule.Moleculeであり、それはやろうとすべきではありません. そのインポート行を削除します。

于 2013-05-20T12:12:17.263 に答える