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

StackOverflow https://stackoverflow.com/questions/935111

  •  06-09-2019
  •  | 
  •  

Вопрос

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

easy_install py2app

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

Это было полезно?

Решение

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

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

Другие советы

from setuptools.command import easy_install

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

install_with_easyinstall('py2app')

Что конкретно вы пытаетесь сделать?Если у вас нет каких-то странных требований, я бы рекомендовал объявить пакет как зависимость в вашем 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 = "me@example.com",
    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 работает чрезвычайно медленно!).

Если у вас действительно есть какие-то требования, которые не могут быть удовлетворены таким образом, вам, вероятно, следует взглянуть на Ответ С.Лотта (хотя я сам никогда этого не пробовал).

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top