16

easy_install python 扩展允许从控制台安装 python 鸡蛋,例如:

easy_install py2app

但是是否可以在 python 脚本中访问 easy_install 功能?我的意思是,不调用 os.system("easy_install py2app") 而是将 easy_install 作为 python 模块导入并使用它的本机方法?

4

5 回答 5

18

当我查看设置工具源时,您似乎可以尝试以下操作。

from setuptools.command import easy_install
easy_install.main( ["-U","py2app"] )
于 2009-06-01T15:05:46.590 回答
4
from setuptools.command import easy_install

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

install_with_easyinstall('py2app')
于 2009-06-01T15:38:08.590 回答
2

你具体想做什么?除非您有一些奇怪的要求,否则我建议您在 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 网站非常慢!)。

如果您确实有某种无法通过这种方式满足的要求,您可能应该查看S.Lott 的答案(尽管我自己从未尝试过)。

于 2009-06-01T15:13:47.120 回答
0

关于调用的答案setuptools.main()是正确的。但是,如果 setuptools 创建一个 .egg,则脚本在安装后将无法导入模块。在 python 开始时,鸡蛋会自动添加到 sys.path 中。

一种解决方案是使用 require() 将新鸡蛋添加到路径中:

from setuptools.command import easy_install
import pkg_resources
easy_install.main( ['mymodule'] )
pkg_resources.require('mymodule')
于 2011-05-10T02:19:52.233 回答
-2

我认为您可以通过使用导入 setuptools 来实现。

于 2009-06-01T14:57:33.097 回答