Ответ 1
Когда я смотрю на источник инструментов установки, похоже, вы можете попробовать следующее.
from setuptools.command import easy_install
easy_install.main( ["-U","py2app"] )
easy_install расширение python позволяет устанавливать яйца python из консоли, например:
easy_install py2app
Но возможно ли доступ к функциям easy_install внутри python script? Я имею в виду, не вызывая 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 = "[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 (хотя я никогда не пробовал что я сам).
Ответ на вызов 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')
Я думаю, вы можете это сделать, используя либо импорт setuptools.