Используя easy_install внутри скрипта Python? - PullRequest
16 голосов
/ 01 июня 2009

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

easy_install py2app

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

Ответы [ 5 ]

18 голосов
/ 01 июня 2009

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

from setuptools.command import easy_install
easy_install.main( ["-U","py2app"] )
4 голосов
/ 01 июня 2009
from setuptools.command import easy_install

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

install_with_easyinstall('py2app')
2 голосов
/ 01 июня 2009

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

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

0 голосов
/ 10 мая 2011

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

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

from setuptools.command import easy_install
import pkg_resources
easy_install.main( ['mymodule'] )
pkg_resources.require('mymodule')
0 голосов
/ 01 июня 2009

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

...