使用 pip 执行 post 安装任务
Execute post installation task with pip
我的项目树结构
.
├── example.gif
├── funmotd
│ ├── config.json
│ ├── __init__.py
│ └── quotes_db.py
├── LICENSE
├── README.md
└── setup.py
setup.py
(删除了一些代码以减少代码)
import sys
import os
import setuptools
from setuptools.command.install import install
class PostInstall(install):
def run(self):
mode = 0o666
bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
install.run(self)
# Added CLI to .bashrc
# Change "config.json" file permission
setuptools.setup(
...
entry_points={'console_scripts': ['funmotd = funmotd:main']},
package_dir={'funmotd': 'funmotd/'},
package_data={'funmotd': ['config.json'], },
include_package_data=True,
python_requires=">=3.4",
cmdclass={'install': PostInstall, },
...
)
PostInstall
在 运行 python3 setup.py install
时执行良好。所以,像下面这样上传到 Pypi
(来自 this doc)
$ python3 setup.py bdist_wheel
# Created "dist", "funmotd.egg-info" and "build" dirs
$ twine upload dist/*
但是当我 运行 pip install funmotd
, PostInstall
是 NOT 执行时,我看到 dist/*
就像静态编译东西。
我运行pip install funmotd
的时候运行post安装任务有什么技巧吗?或者如何让 setup.py
在 pip
处执行。
我遵循了以下问题,但没有得到我需要的解决方案
Post-install script with Python setuptools
Run custom task when call `pip install`
PS: 我不希望用户克隆 repo 和 运行 python setup.py install
。想简单点pip install funmotd
UDPATE1
似乎已经有 issue on github 是长线程
您需要调用父 运行,首先,在执行其余 PostInstall
之前,您可以尝试:
class PostInstall(install):
def run(self):
install.run(self)
mode = 0o666
bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
# Added CLI to .bashrc
# Change "config.json" file permission
这有望解决问题 - 我自己也遇到过非常相似的问题,在本地工作,但不是通过 pip。
pip
不会 运行 setup.py
来自轮子因此你不能 运行 来自轮子 setup.py
的任何 post-installation 代码.
setup.py
用于构建轮子或在安装源分发 (sdist) 期间使用。因此,如果您希望 post-installation 脚本停止将轮子上传到 PyPI,请仅发布源代码分发 (python3 setup.py sdist
)。然后 pip install funmotd
将 运行 来自 setup.py
的代码。
我的项目树结构
.
├── example.gif
├── funmotd
│ ├── config.json
│ ├── __init__.py
│ └── quotes_db.py
├── LICENSE
├── README.md
└── setup.py
setup.py
(删除了一些代码以减少代码)
import sys
import os
import setuptools
from setuptools.command.install import install
class PostInstall(install):
def run(self):
mode = 0o666
bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
install.run(self)
# Added CLI to .bashrc
# Change "config.json" file permission
setuptools.setup(
...
entry_points={'console_scripts': ['funmotd = funmotd:main']},
package_dir={'funmotd': 'funmotd/'},
package_data={'funmotd': ['config.json'], },
include_package_data=True,
python_requires=">=3.4",
cmdclass={'install': PostInstall, },
...
)
PostInstall
在 运行 python3 setup.py install
时执行良好。所以,像下面这样上传到 Pypi
(来自 this doc)
$ python3 setup.py bdist_wheel
# Created "dist", "funmotd.egg-info" and "build" dirs
$ twine upload dist/*
但是当我 运行 pip install funmotd
, PostInstall
是 NOT 执行时,我看到 dist/*
就像静态编译东西。
我运行pip install funmotd
的时候运行post安装任务有什么技巧吗?或者如何让 setup.py
在 pip
处执行。
我遵循了以下问题,但没有得到我需要的解决方案
Post-install script with Python setuptools
Run custom task when call `pip install`
PS: 我不希望用户克隆 repo 和 运行 python setup.py install
。想简单点pip install funmotd
UDPATE1
似乎已经有 issue on github 是长线程
您需要调用父 运行,首先,在执行其余 PostInstall
之前,您可以尝试:
class PostInstall(install):
def run(self):
install.run(self)
mode = 0o666
bashrc_file = os.path.join(os.path.expanduser('~'), ".bashrc")
# Added CLI to .bashrc
# Change "config.json" file permission
这有望解决问题 - 我自己也遇到过非常相似的问题,在本地工作,但不是通过 pip。
pip
不会 运行 setup.py
来自轮子因此你不能 运行 来自轮子 setup.py
的任何 post-installation 代码.
setup.py
用于构建轮子或在安装源分发 (sdist) 期间使用。因此,如果您希望 post-installation 脚本停止将轮子上传到 PyPI,请仅发布源代码分发 (python3 setup.py sdist
)。然后 pip install funmotd
将 运行 来自 setup.py
的代码。