2016-11-27 85 views
1

我的存儲庫包含我自己的python模塊和一個具有其自己的setup.py的依賴關係的子模塊。在setup.py中調用另一個setup.py

我想在安裝我自己的lib時調用dependency的setupy.py,怎麼可能?

我第一次嘗試:

$ tree 
. 
├── dependency 
│ └── setup.py 
└── mylib 
    └── setup.py 


$ cat mylib/setup.py 
from setuptools import setup 

setup(
    name='mylib', 
    install_requires= ["../dependency"] 
    # ... 
) 

$ cd mylib && python setup.py install 
error in arbalet_core setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid requirement, parse error at "'../depen'" 

然而install_requires不接受路徑。

我的第二次嘗試是使用dependency_links=["../dependency"]install_requires=["dependency"]但是在Pypi中已經存在相同名稱的依賴關係,因此setuptools會嘗試使用該版本而不是我的版本。

什麼是正確/最乾淨的方式?

+0

也許這是可能使用'dependency_links'使用'文件:// URL'這裏解釋說:https://stackoverflow.com/questions/32688688/how-to-寫設置吡到包括-A-GIT-回購作爲一種依賴關係。如果代碼在你的控制之下,你不能重命名依賴項嗎? – languitar

回答

0

可能的解決方案是在安裝過程之前/之後運行自定義命令。

一個例子:

from setuptools import setup 
from setuptools.command.install import install 

import subprocess 

class InstallLocalPackage(install): 
    def run(self): 
     install.run(self) 
     subprocess.call(
      "python path_to/local_pkg/setup.py install", shell=True 
     ) 

setup(
    ..., 
    cmdclass={ 'install': InstallLocalPackage } 
)