我發現的是,PIP運行一個python命令行腳本,看起來像這樣:
__file__ = '<path to package>/setup.py'
from setuptools.command import egg_info
def replacement_run(self):
self.mkpath(self.egg_info)
installer = self.distribution.fetch_build_egg
for ep in egg_info.iter_entry_points('egg_info.writers'):
# require=False is the change we're making:
writer = ep.load(require=False)
if writer:
writer(self, ep.name, egg_info.os.path.join(self.egg_info,ep.name))
self.find_sources()
egg_info.egg_info.run = replacement_run
execfile(__file__)
在包的頂級目錄,其中沒有setup.py,我把一個setup.py那轉載此行爲,但chdir'd包含「真正的」setup.py目錄,並在最後執行,而不是。
唯一的另一個問題是,pip創建了一個目錄「pip-egg-info」,它期望被填充,需要在「real」setup.py目錄中創建一個符號鏈接。
新的頂級設置。吡啶是這樣的:
#! /usr/bin/env python
from os import chdir, symlink, getcwd
from os.path import join, basename, exists
filename = basename(__file__)
chdir("python")
setupdir = getcwd()
egginfo = "pip-egg-info"
if not exists(egginfo) and exists(join("..", egginfo)):
symlink(join("..", egginfo), egginfo)
__file__ = join(setupdir, filename)
from setuptools.command import egg_info
def replacement_run(self):
self.mkpath(self.egg_info)
installer = self.distribution.fetch_build_egg
for ep in egg_info.iter_entry_points('egg_info.writers'):
# require=False is the change we're making:
writer = ep.load(require=False)
if writer:
writer(self, ep.name, egg_info.os.path.join(self.egg_info,ep.name))
self.find_sources()
egg_info.egg_info.run = replacement_run
execfile(__file__)
這也可能是脆弱的,但應該繼續工作,直到畫中畫改變,它的產生
我假設你知道你可以解開它,並自己運行'python setup.py install'? – 2011-03-15 22:28:26
是的,我知道這一點。只是我寧願使用pip,因爲我可以使用pip凍結需求文件以及製作一個包與其他人共享。 – dave 2011-03-16 17:01:54