2016-07-24 17 views
0

経由のpython3で私の地元のモジュールをインポートします。bin/mkbib.pyは私のようにディレクトリ構造を持っているピップ

tree 
    . 
    ├── bin 
    │   └── mkbib.py 
    ├── LICENSE 
    ├── mkbib 
    │   ├── __init__.py   #empty file 
    │   ├── menubar.ui   #a xml file. where should I place it? 
    │   ├── menu.py 
    │   ├── pybib.py 
    │   └── view.py 
    ├── mkbib.desktop.in #should be copied to /usr/local/applications 
    ├── README 
    └── setup.py 

mkbib/内のファイルをインポートするメインファイルです。そしてbin/mkbib.pyに、私が使用:すべてのファイルが同じディレクトリにある場合

import mkbib.menu as menu 
import mkbib.view as view 
# import view 
# import pybib 

、最後の2行は十分にあります。私は受け入れられた答えhereに従ってそれらを分けた。

しかし、今、私はコードを実行しようとしていたとき、私はエラーを取得しています:

File "mkbib.py", line 26, in __init__ 
    self.TreeView = view.treeview() 
NameError: name 'view' is not defined 

私の究極の目標は、私がリンクされている問題と同じ、/bin/mkbibアプリをインストールすることで、私は何の成功もありません。

マイsetup.pyは次のとおりです。

from setuptools import setup, find_packages 
from codecs import open 
from os import path 

here = path.abspath(path.dirname(__file__)) 
with open(path.join(here, 'README'), encoding='utf-8') as f: 
    long_description = f.read() 

setup(
    name='mkbib', 
    version='0.1', 
    description='BibTeX Creator', 
    url='https://github.com/rudrab/mkbib', 
    author='Rudra Banerjee', 
    author_email='[email protected]', 
    license='GPLv3', 
    packages=['mkbib'], 
    package_dir={'mkbib': 'mkbib'}, 
    scripts=['bin/mkbib.py'] 
    ) 

私はsetup.pyを実行すると、私が取得します。

sudo python3 setup.py develop 
running develop 
running egg_info 
writing top-level names to mkbib.egg-info/top_level.txt 
writing mkbib.egg-info/PKG-INFO 
writing dependency_links to mkbib.egg-info/dependency_links.txt 
reading manifest file 'mkbib.egg-info/SOURCES.txt' 
writing manifest file 'mkbib.egg-info/SOURCES.txt' 
running build_ext 
Creating /usr/lib/python3.5/site-packages/mkbib.egg-link (link to .) 
mkbib 0.1 is already the active version in easy-install.pth 
Installing mkbib.py script to /usr/bin 

Installed /home/rudra/Devel/mkbib/Mkbib 
Processing dependencies for mkbib==0.1 
Finished processing dependencies for mkbib==0.1 

私もmkbibにPYTHONPATHエクスポートしようとしている:私が言ったように、すべてのファイルが同じディレクトリにある場合、

echo $PYTHONPATH 
~/Devel/mkbib/Mkbib/mkbib 

その作業完璧。

mkbib.pyの構造がある(GeckStarで尋ねたとして)

#!/usr/bin/python3 

import gi 
import sys 
# import mkbib 
import mkbib.menu as menu 
import mkbib.view as view 
# import view 
# import pybib 
import urllib.parse as lurl 
import webbrowser 
import os 
from gi.repository import Gtk, Gio # , GLib, Gdk 
gi.require_version("Gtk", "3.0") 


class Window(Gtk.ApplicationWindow): 
    def __init__(self, application, giofile=None): 
     Gtk.ApplicationWindow.__init__(self, 
             application=application, 
             default_width=1000, 
             default_height=200, 
             title="mkbib") 

     self.TreeView = view.treeview() 
     self.MenuElem = menu.MenuManager() 
     self.Parser = pybib.parser() 
     self.name = "" 

......... 
class mkbib(Gtk.Application): 
    def __init__(self): 
     Gtk.Application.__init__(self) 
     self.connect("startup", self.startup) 
     self.connect("activate", self.activate) 
.......... 

def install_excepthook(): 
    """ Make sure we exit when an unhandled exception occurs. """ 
    old_hook = sys.excepthook 

    def new_hook(etype, evalue, etb): 
     old_hook(etype, evalue, etb) 
     while Gtk.main_level(): 
      Gtk.main_quit() 
     sys.exit() 
    sys.excepthook = new_hook 


if __name__ == "__main__": 
    app = mkbib() 
    r = app.run(sys.argv) 
    sys.exit(r) 

親切に役立ちます。

+0

パッケージをインストールするには実際に* '* setup.py'を実行しましたか? – jonrsharpe

+0

jonrsharpeはい、誤って別のファイル構造で古い 'setup.py'を表示しています。 (今現在の) 'setup.py'を修正してください。実行されました。親切な一見。 – BaRud

+0

残りの 'mkbib.py'ファイル、特に最初の26行はエラーが発生している場所から見ると便利です。 – GeckStar

答えて

0

これは、モジュールとパッケージへのパスを設定するというPythonの欠点の1つです。 PYTHONPATHを変更することなく

import mkbib 

:あなたのケースでは、あなたの後に単に持っている必要がありbin/mkbib.pymkbibパッケージをインストールします。これは、bin/mkbib.pyがバイナリとして使用されるように設計されており、に既にmkbibパッケージが存在することを前提としているためです。

$ python -c 'import mkbib' 

を何もしないはずである:あなたはmkbibを実行することにより、無修正PYTHONPATH上にあるかどうかをテストすることができます。

Pythonは現在のディレクトリ.を相対パスの解決に使用します。そのため、すべてのファイルが1つのフォルダにある場合にセットアップが機能します。

+0

私はpythonsの問題を考えていません....あなたが実行可能ファイルを実行する必要がある場合、適切な場所にdependeを置く必要があります。あなたのコメントは、mkbib /ディレクトリも適切なディレクトリに置かれている場合にのみ有効です。 '/ usr/lib64/python3.5/site-packages /'と書かれています。 – BaRud

+0

'python setup.py build && sudo python setup.py install'でパッケージをインストールする必要があります。私はあなたがすでにそれをしていたと仮定しました。 – polarise

+0

はい....私はそれをしました – BaRud

関連する問題