setup.py 安装 os 依赖
setup.py install os dependency
我想制作一个可分发的包。
我的包裹依赖于一些 OS 包裹
这是我要安装的:
def install_libmagic():
if sys.platform == 'darwin':
subprocess.run(['brew', 'install', 'libmagic'])
elif sys.platform == 'linux':
subprocess.run(['apt-get', 'update'])
subprocess.run(['apt-get', 'install', '-y', 'libmagic1'])
else:
raise Exception(f'Unknown system: {sys.platform}, can not install libmagic')
我希望此代码仅在 smb 调用时执行:
pip install mypacakge
我不希望它在我运行时被执行:python setup.py bdist_wheel
如何实现?
我试过这个:
setup(
...
install_requires=install_libmagic(),
)
还尝试覆盖安装命令:
from setuptools.command.install import install
class MyInstall(install):
def run(self):
install_libmagic()
install.run(self)
setup(
...
cmdclass={'install': MyInstall}
)
但是函数是在python setup.py bdist_wheel
上执行的,这不是我想要实现的。
我认为您混淆了内置发行版(轮子)和源发行版的行为。
如果您的目标是在 安装 时 运行 一些子进程,那么您不能使用构建的发行版来做到这一点。构建的发行版在安装时不执行 Python 代码。它仅在 build 时执行 setup.py
,这就是为什么您在调用 python setup.py bdist_wheel
.
时看到函数被执行的原因
另一方面,源代码分发 (python setup.py sdist
) 会在构建时和安装时执行 setup.py
文件(大致相同作为 python setup.py install
) 并且会给你你正在寻找的行为。
但是,正如评论已经提到的,这将非常脆弱,而且 user-friendly 或便携性不佳。你所描述的实际上是一个 distro/OS 包,其中包含一些 Python 模块,你可能会更好。
我想制作一个可分发的包。 我的包裹依赖于一些 OS 包裹
这是我要安装的:
def install_libmagic():
if sys.platform == 'darwin':
subprocess.run(['brew', 'install', 'libmagic'])
elif sys.platform == 'linux':
subprocess.run(['apt-get', 'update'])
subprocess.run(['apt-get', 'install', '-y', 'libmagic1'])
else:
raise Exception(f'Unknown system: {sys.platform}, can not install libmagic')
我希望此代码仅在 smb 调用时执行:
pip install mypacakge
我不希望它在我运行时被执行:python setup.py bdist_wheel
如何实现?
我试过这个:
setup(
...
install_requires=install_libmagic(),
)
还尝试覆盖安装命令:
from setuptools.command.install import install
class MyInstall(install):
def run(self):
install_libmagic()
install.run(self)
setup(
...
cmdclass={'install': MyInstall}
)
但是函数是在python setup.py bdist_wheel
上执行的,这不是我想要实现的。
我认为您混淆了内置发行版(轮子)和源发行版的行为。
如果您的目标是在 安装 时 运行 一些子进程,那么您不能使用构建的发行版来做到这一点。构建的发行版在安装时不执行 Python 代码。它仅在 build 时执行 setup.py
,这就是为什么您在调用 python setup.py bdist_wheel
.
另一方面,源代码分发 (python setup.py sdist
) 会在构建时和安装时执行 setup.py
文件(大致相同作为 python setup.py install
) 并且会给你你正在寻找的行为。
但是,正如评论已经提到的,这将非常脆弱,而且 user-friendly 或便携性不佳。你所描述的实际上是一个 distro/OS 包,其中包含一些 Python 模块,你可能会更好。