我正在开发一个包,它有一些可选的依赖项和“额外”。
目标: 我希望以下两件事起作用:
状态:目前我已经能够:
使用python setup.py install或python setup.py develop执行安装后代码;使用这里的方法/sf/answers/2583149761/
使用pip install PACKAGE[extra]正确安装/管理的额外或不同的封装配置。
在我的研究中,我没有发现python setup.py允许“额外”的功能,也没有发现pip install允许我的安装后代码执行的功能。*已更改,请参阅更新
笔记:
使用 pip 9.0.1,python 3.6
我的安装后很简单,它只是获取有关可用资源的一些信息,创建一个文件,并使用print().
问题:我是否错过了某些功能,或者是否没有一种方法可以仅使用一种安装方法来干净地完成这两个操作?
更新:
该pip install方法实际上执行了我的安装后代码(打印件通过管道传送到某处,仅使用-vvvarg可见)。另一个问题是(除非与 一起安装-e)它使用临时构建目录,C:\Users\USER\AppData\Local\Temp\pip-ix4d6hv3-build然后清理它,而不是在本地目录中构建。在这种情况下,我的文件创建要么不起作用,我一直无法找到文件的创建位置,要么被 pip 清理(我尝试--no-clean过相同的结果)。
供他人参考:
如果从本地目录(不是 tar/whl/etc. 文件)安装,软件包将被复制到一个临时目录,参见 ^update^。然后setuptools.command.egg_info子类 insetup.py将在setuptools.command.installor setuptools.command.develop (passed in cmdclassarg)之前执行。
npm install whatever删除node_modules/-文件夹的原因不同:我以为它可以运行preinstall但没有postinstall,我错了。
我没有运行这两个脚本。
原因似乎是npm install whatever它还删除了我的package.json. 有趣的是,它没有安装在 my 中提到package.json但在node_modules. 这与迈克尔·瓦德尔在评论中所写的完全一样。这对我来说毫无意义,但是......
在此评论之后,我切换到绝对导入并依靠 postinstall(在我自己的 package.json 中)来创建链接
{
"scripts": {
"preinstall": "rm node_modules/-",
"postinstall": "ln -s `pwd`/src node_modules/-",
...
},
}
Run Code Online (Sandbox Code Playgroud)
它运行良好,除非我真的安装了一些东西。和
npm install
Run Code Online (Sandbox Code Playgroud)
链接被删除,然后重新创建。然而,随着
npm install whatever
Run Code Online (Sandbox Code Playgroud)
链接被删除,但不会重新创建。这是一个错误还是故意的,我应该使用其他一些“安装后”吗?
请注意,我并不担心丢失我的src目录。那是一个不同的问题。我的问题是“安装后”仅有时运行。
人们评论说,钩子只有在npm install没有任何参数的情况下运行时才会运行。我可以接受,但事实并非如此:
> ls -l node_modules/-
lrwxrwxrwx 1 maaartinus maaartinus 40 May 29 …Run Code Online (Sandbox Code Playgroud) 我想在文件之后composer update或composer install从composer.json文件自动运行一个交互式 PHP 脚本,例如:
"scripts": {
"raven-cmd": [
"php bin/console kolesar:boilerplate:setup"
],
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts",
"@kolesar-cmd"
],
"post-update-cmd": [
"@auto-scripts",
"@kolesar-cmd"
]
},
Run Code Online (Sandbox Code Playgroud)
Symfony 命令php bin/console kolesar:boilerplate:setup是需要一些用户输入的交互式脚本,但这不起作用。交互模式确实不起作用。
任何提示,如何解决这个问题?或者也许有另一个想法在之后强制设置composer update/install?
所以,我有一个库haste-mapper(链接到 Github - 我想要一些关于它的意见)。它使用gulp、babel-core以及其他一些 npm 包来构建自身,以便拥有有效的 JavaScript 而不是 Flow 进入目录build/。我将其添加为postinstall钩子脚本package.json:
"postinstall": "gulp build"
Run Code Online (Sandbox Code Playgroud)
它有效,脚本开始运行,但不满足主机包中所需的依赖项。我有gulp并且babel-core好像devDependencies没有安装它们。将它们添加到dependencies似乎在语义上是错误的。我尝试将它们添加到peerDependencies,但它没有安装缺少的内容,而是抱怨它。
我该怎么办?
PS这是package.json
post-install ×5
node.js ×2
npm ×2
reactjs ×2
composer-php ×1
core-js ×1
javascript ×1
json ×1
npm-install ×1
php ×1
pip ×1
python ×1
setuptools ×1
symfony ×1
symfony4 ×1