Использование easy_install внутри скрипта python?
-
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.