【发布时间】:2016-11-27 19:45:15
【问题描述】:
我的目录结构为:
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='bnrj.rudra@gmail.com',
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)
请帮忙。
【问题讨论】:
-
您是否真的运行
setup.py,来安装软件包? -
jonrsharpe 是的,但我错误地展示了具有不同文件结构的旧
setup.py。正确(至少当前)setup.py并且现在包含运行。请看一看。 -
查看
mkbib.py文件的其余部分会很有帮助,尤其是前 26 行,因为那是发生错误的地方。 -
我真的不明白为什么要提出
NameError。当您使用名称不明确的函数或类时,通常会发生这种情况。我建议您尝试使用其他名称导入mkbib.view,或更改mkbib文件夹的名称,然后看看它是否有效。 -
@GeckStar:在我
build系统之后,如果我从 Mkbib 目录运行,现在它会为菜单和其他人提供 ImportError。这是因为,mkbib的内容放在了build/lib中,而不是放在 /usr/lib/python3.5...
标签: python python-3.x setuptools setup.py