2017-02-13 21 views
2

У меня есть несколько наборов служебных функций, которые я написал для анализа научных данных. Например, для создания графиков я мог бы иметь файл с именем plotting_tools.pyКак создать локальный пакет Python для модулей, которые я использую для нескольких разных проектов.

В течение нескольких различных проектов в нескольких различных домашних каталогах и виртуальные среды, я мог бы использовать функции из plotting_tools.py Один из способов сделать это, чтобы иметь копию plotting_tools.py в каждом каталоге проекта, а затем просто запустить

from plotting_tools.py import * 

в верхней части моей работы (например, в записной книжке Jupyter).

Однако этот подход имеет ограничения, поскольку, когда я обнаруживаю ошибку в plotting_tools.py, мне приходится вручную обновлять каждую локальную копию. Другим вариантом является один каталог на моем компьютере, с которого я импортировать модуль с помощью importlib

from importlib.machinery import SourceFileLoader 

foo = SourceFileLoader("plotting_tools","/Users/me/plotting_tools.py").load_module() 
from plotting_tools.py import * 

Это немного хрупким, потому что она имеет жесткий кодированный каталог, и инструменты, такие как autoreload() перерыва.

Мне было любопытно, есть ли способ более эффективно справиться с этой проблемой, когда у меня есть какой-то локальный каталог со всеми моими файлами функций полезности, которые можно рассматривать как пакет (например, когда я делаю новый проект и виртуальную среду. Я могу просто установить текущую версию plotting_tools в эту среду, а затем вручную обновить ее, если основная версия изменится). Лучше всего это сделать, чтобы использовать репозиторий GitHub для всех моих функций, или есть ли способ сделать это чисто локально?

ответ

2

Вы можете создать локальную библиотеку, используя distutils.

вы можете создать setup.py и определить свою библиотечную структуру там. , то вы можете сделать

питон setup.py установить

и было бы установить библиотеку в систему или virtualenv со структурой пакета вы определили, а затем вы можете импортировать из этого пакета в других ваших проектах , это похоже делать

ГПГ, инсталляционный пакет

, но это было бы на месте.

вот пример setup.py вы можете определить.

предполагает, что вы определили свою полезность проект как utils

from distutils.core import setup 
from utils.version import __version__ 

setup(
    name='utils', 
    version=__version__, 
    description='utility library', 
    author='Asav Patel', 
    author_email='', 
    requires=['tornado', 
       'sqlalchemy', ], 
    py_modules=['config'], 
    install_requires=[ 'psutil' 
        ], 
    packages=['utils', 
       'polotting_lib', 'polotting_lib.graph', 'polotting_lib.maps', 
       'other_packages'], 
    package_data={ 
     'polotting_lib': ['*'], 
    }, 
) 

тогда вобще

питона setup.py установить

После этого в других ваших сценариях вы можете сделать.

from polotting_lib import * 

def foo(*args): 
    some_method_from_plotting_lib(args) 

надеюсь, что это поможет.