2016-07-24 8 views
0

У меня есть структура каталогов, как:импортировать мой локальный модуль в Python3, чтобы он мог я установил в системе через пип

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 

Моя конечная цель состоит в том, чтобы установить mkbib приложение в /bin/, так же, как вопрос я связан, но у меня нет никакого успеха.

Мои 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 «s (как спросил 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' с другой файловой структурой. Правильно (atleast current) 'setup.py', и запуск включен. Пожалуйста, посмотрите. – BaRud

+0

Было бы полезно увидеть остальную часть вашего файла 'mkbib.py', особенно первые 26 строк, так как там происходит ошибка. – GeckStar

ответ

0

Это один из причуд Питона: настройка путей к модулям и пакетам. В вашем случае, после установки пакета mkbibbin/mkbib.py должен просто иметь:

import mkbib 

без каких-либо изменений в PYTHONPATH. Это связано с тем, что bin/mkbib.py предназначен для использования в качестве двоичного кода и предполагает, что пакет mkbib уже по умолчанию PYTHONPATH. Вы можете проверить, является ли mkbib на немодифицированной PYTHONPATH, запустив:

$ python -c 'import mkbib' 

, который не должен делать ничего.

Python принимает в качестве ссылки текущий каталог . при разрешении относительных путей, поэтому ваша установка работает, когда все файлы находятся в одной папке.

+0

Я не думаю, что проблема его pythons .... если вам нужно запустить исполняемый файл, вы должны поместить его dependecies в правильное место. Ваш комментарий действителен, только когда каталог mkbib/также помещен в подходящий каталог, например. '/ usr/lib64/python3.5/site-packages /', и это вопрос: как я могу это сделать. – BaRud

+0

Вам необходимо установить пакет с 'python setup.py build && sudo python setup.py install'. Я предположил, что вы уже это сделали. – polarise

+0

да .... я сделал это – BaRud

 Смежные вопросы

  • Нет связанных вопросов^_^