Использование easy_install внутри python script?

easy_install расширение python позволяет устанавливать яйца python из консоли, например:

easy_install py2app

Но возможно ли доступ к функциям easy_install внутри python script? Я имею в виду, не вызывая os.system( "easy_install py2app" ), но вместо этого импортируя easy_install в качестве модуля python и используя его собственные методы?

Ответы

Ответ 1

Когда я смотрю на источник инструментов установки, похоже, вы можете попробовать следующее.

from setuptools.command import easy_install
easy_install.main( ["-U","py2app"] )

Ответ 2

from setuptools.command import easy_install

def install_with_easyinstall(package):
    easy_install.main(["-U", package]).

install_with_easyinstall('py2app')

Ответ 3

Что конкретно вы пытаетесь сделать? Если у вас нет каких-то странных требований, я бы рекомендовал объявить пакет как зависимость в вашем setup.py:

from setuptools import setup, find_packages
setup(
    name = "HelloWorld",
    version = "0.1",
    packages = find_packages(),
    scripts = ['say_hello.py'],

    # Project uses reStructuredText, so ensure that the docutils get
    # installed or upgraded on the target machine
    install_requires = ['docutils>=0.3'],

    package_data = {
        # If any package contains *.txt or *.rst files, include them:
        '': ['*.txt', '*.rst'],
        # And include any *.msg files found in the 'hello' package, too:
        'hello': ['*.msg'],
    }

    # metadata for upload to PyPI
    author = "Me",
    author_email = "[email protected]",
    description = "This is an Example Package",
    license = "PSF",
    keywords = "hello world example examples",
    url = "http://example.com/HelloWorld/",   # project home page, if any

    # could also include long_description, download_url, classifiers, etc.
)

Ключевая строка здесь install_requires = ['docutils>=0.3']. Это приведет к тому, что файл setup.py автоматически установит эту зависимость, если пользователь не укажет иное. Вы можете найти дополнительную документацию по этому здесь (обратите внимание, что сайт setuptools очень медленный!).

Если у вас есть какое-то требование, которое не может быть выполнено таким образом, вы должны, вероятно, посмотреть ответ S.Lott (хотя я никогда не пробовал что я сам).

Ответ 4

Ответ на вызов setuptools.main() правильный. Однако если setuptools создает .egg, script не сможет импортировать модуль после его установки. Яйца автоматически добавляются к sys.path во время запуска python.

Одним из решений является использование require() для добавления нового яйца в путь:

from setuptools.command import easy_install
import pkg_resources
easy_install.main( ['mymodule'] )
pkg_resources.require('mymodule')

Ответ 5

Я думаю, вы можете это сделать, используя либо импорт setuptools.