2016-07-24 24 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

相关问题