【问题标题】:Activating virtual environment doesn't work from npm command从 npm 命令激活虚拟环境不起作用
【发布时间】:2015-08-23 21:18:48
【问题描述】:

在我的package.json 中,我有一个脚本来激活我的 python 虚拟环境(我的项目同时使用 Python 和 Nodejs)。我基本上想从 npm 激活我的虚拟环境。

"scripts": {
    "babel-node": "babel-node --stage 0 --ignore='foo|bar|baz'",
    "test": "export NODE_ENV='test'; ./node_modules/mocha/bin/mocha --compilers js:babel/register server/test/index.js",
    "dev": "./node_modules/nodemon/bin/nodemon.js --exec npm run babel-node -- server/index.js",
    "activate": "source ./venv/bin/activate",

    "import": "python scraper -g -i -db caltrain_test && python ./scraper -g -i",
    "start": "node ./server",
    "docs": "cp README.md docs/index.md && ./node_modules/docco/bin/docco --layout=linear ./docs/index.md"
},

如果我直接从命令行激活我的虚拟环境,它可以工作:

jorgesilvajetter at Jorges-MacBook-Pro-2 in ~/Sites/2015/caltrain-api on master [!?$]
$ source venv/bin/activate
(venv) // This means that it worked!

但是,如果我从 npm 运行相同的命令,它就不起作用:

jorgesilvajetter at Jorges-MacBook-Pro-2 in ~/Sites/2015/caltrain-api on master [!?$]
$ npm run activate

> caltrain-api@0.0.3 activate /Users/jorgesilvajetter/Sites/2015/caltrain-api
> source ./venv/bin/activate

是否可以通过 npm 命令激活我的虚拟环境?似乎我对虚拟环境的工作方式或 npm 如何执行脚本有误解。也许,它正在另一个会话/选项卡中运行脚本?

【问题讨论】:

  • 你真的解决了这个问题吗?我遇到了同样的问题。我希望我可以将 npm 用于所有事情
  • 好像不可能:(

标签: python node.js shell npm pip


【解决方案1】:

为了满足您的要求,我执行了以下操作:

我正在使用Django,并想启动后端服务器以将其与Reactjs 一起使用。

第 1 步:

manage.py 旁边的 Django 项目上创建一个文件,即:activate.py 并使用以下代码

import subprocess

# Path to your python in the env
pythonBinary = "./env/Scripts/python"

# Path to your manage.py file
managePy = "./manage.py"

subprocess.Popen([pythonBinary, managePy, "runserver"])

第二步:

package.json 中的脚本应如下所示

...

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "activate": "cd /path/to/your/django/project && python activate.py"
  },

...

它对我有用,我希望它对你有用!

祝你有美好的一天

【讨论】:

    【解决方案2】:

    来自https://docs.npmjs.com/misc/scripts,“通过将该行作为脚本参数传递给 sh 来运行脚本。”因此,尽管您使用的是 source,但它位于一个新的子 shell 中。

    提醒一下:对于 npm 脚本,npm 将 ./node_modules/.bin 添加到 PATH 中,因此在 npm 脚本中您可以只写例如 "nodemon" 而不是 ".node_modules/nodemon/bin/nodemon.js"".node_modules/.bin/nodemon。 npm 知道用正确的脚本填充./node_modules/.bin,因为包作者在他们的package.json 中指定了"bin" 属性。

    【讨论】:

    • 酷,有道理。是的,我知道第二部分。我想我只是喜欢这个符号,因为它清楚地表明 nodemon 是项目的依赖项,不需要全局安装,但如果你愿意,你可以不同意我的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多