2016-07-24 22 views
0

安裝在系統中我有一個目錄結構:導入我的本地模塊中python3所以我可以通過PIP

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 

bin/mkbib.py是主文件,其中進口在mkbib/的文件。而在bin/mkbib.py,我使用:

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

如果所有文件都在同一個目錄中,最後兩行就足夠了。我根據已接受的答案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 

我也試圖出口PYTHONPATH到mkbib

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的怪癖之一:設置模塊和包的路徑。在你的情況,在您安裝mkbibbin/mkbib.py應該簡單地有:

import mkbib 

沒有任何變化PYTHONPATH。這是因爲bin/mkbib.py被設計爲用作二進制文件,並且假定mkbib程序包已經在默認的PYTHONPATH上。您可以通過運行測試mkbib是否在未修改PYTHONPATH

$ python -c 'import mkbib' 

應該什麼都不做。

Python在解析相對路徑時參考當前目錄.,這就是爲什麼當所有文件都在一個文件夾中時,您的設置工作。

+0

我不認爲它的pythons的問題....如果你需要運行一個可執行文件,你必須將它的依賴放置在適當的位置。只有當mkbib /目錄也放在合適的目錄中時,你的註釋纔有效。 '/ usr/lib64/python3.5/site-packages /',這是一個問題:我該怎麼做。 – BaRud

+0

您需要使用'python setup.py build && sudo python setup.py install'來安裝軟件包。我以爲你已經做到了。 – polarise

+0

是的....我已經做到了 – BaRud

相關問題