我的项目树结构
.
├── 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
执行正常。因此,如下所示从this doc上传到Pypi
$ python3 setup.py bdist_wheel
# Created "dist", "funmotd.egg-info" and "build" dirs
$ twine upload dist/*
但是当我运行pip install funmotd
时,PostInstall
是没有执行的,我看到dist/*
就像是静态编译的东西。
当我运行pip install funmotd
时,是否有任何技巧可以运行安装后任务。或如何使setup.py
在pip
执行。
我遵循了以下问题,没有得到我需要的解决方案
PS::我不希望用户克隆存储库并运行python setup.py install
。想要简单pip install funmotd
UDPATE1
似乎已经有issue on github个长线程
答案 0 :(得分:3)
pip
不能从轮子上运行setup.py
,因此您不能在轮子上从setup.py
运行任何安装后代码。
setup.py
用于构建轮子或在安装源分发(sdist)期间使用。因此,如果您希望安装后脚本停止将车轮上传到PyPI,请仅发布源代码发行版(python3 setup.py sdist
)。然后pip install funmotd
将运行setup.py
中的代码。
答案 1 :(得分:-1)
首先,您需要调用父运行,然后才能执行其余的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
这有望解决问题-我遇到了与自己非常相似的问题,这些问题在本地运行,但不是通过点子进行。