我有一个py文件,它使用传递给它的系统参数来预执行google搜索,并将搜索的前五个结果作为单独的浏览器选项卡打开(这是自动化无聊事情一书中的一个练习)。
我想通过Windows运行命令执行这个脚本,因此创建了一个BAT文件。
目前,当我执行BAT文件时,没有找到一个"模块"。返回错误
我怀疑这个问题与py文件所需的模块只安装在我的特定python项目的虚拟环境中有关(我有一个专门用于本书练习的项目)。因此,我将必要的模块直接安装到主Python安装的环境中。不幸的是,这没有效果。
然后,我修改了我的BAT文件,在执行py文件的行之前添加了一行来激活我的虚拟环境。这似乎阻止了我的py文件被BAT文件执行。我对Python有点熟悉,但对BAT文件和命令行一般都不熟悉。我已经通读了一个基本的命令行教程,但找不到任何帮助。
我不知道如何解决这个问题,如果可能的话,我想避免用大量的模块污染我的主要python环境。这是可能的吗?如果是的话,我错过了什么?
。bat文件@py.exe C:UsersBettyPycharmProjectsAutomate_the_Boring_Stuff12searchpypi.py %*
@pause
. py文件#! python3
# searchpypi.py - Opens several search results.
import sys
import webbrowser
import requests
import bs4
print('Searching...') # display text while downloading the search result page
res = requests.get('https://google.com/search?q=' 'https://pypi.org/search/?q='
+ ' '.join(sys.argv[1:]))
res.raise_for_status()
# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Open a browser tab for each result.
linkElems = soup.select('.package-snippet')
numOpen = min(5, len(linkElems))
# Open a browser tab for each result.
for i in range(numOpen):
urlToOpen = 'https://pypi.org' + linkElems[i].get('href')
print('Opening', urlToOpen)
webbrowser.open(urlToOpen)
edit (Fri Mar 05 16:41:27 2021 UTC):
错误信息(从命令行复制):
Traceback (most recent call last):
File "C:UsersBettyPycharmProjectsAutomate_the_Boring_Stuff12searchpypi.py", line 8, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Press any key to continue . . .
edit (Sat Mar 06 07:39:43 2021 UTC):
Pip细节:
C:UsersBetty>pip -V
pip 21.0.1 from c:python38libsite-packagespip (python 3.8)
C:UsersBetty>pip3 list
Package Version
---------------- ----------
appdirs 1.4.4
certifi 2020.12.5
chardet 4.0.0
distlib 0.3.1
filelock 3.0.12
idna 2.10
pip 21.0.1
pipenv 2020.11.15
requests 2.25.1
setuptools 41.2.0
six 1.15.0
urllib3 1.26.3
virtualenv 20.2.2
virtualenv-clone 0.5.4
wheel 0.34.2
C:UsersBetty>
自动化一切意味着:
- 为Python脚本创建虚拟环境
- 采购它 <
- 安装依赖/gh>
- 运行脚本
- 可选(必要时清除)
有一种方法可以在Bash上完成,但我不确定是否同样适用于Windows shell。
首先你需要把所有的依赖放到一个requirements.txt文件中。每个依赖项应该在文档中占一行。
requirements.txt
的内容:
webbrowser
beautifulsoup4
和自动化script.sh
:
# creates a venv folder that contains a copy of python3 packages to isolate any further changes in packages from the system installation
python3 -m venv venv
# tell the shell to use the created virtual environment
source venv/bin/activate
# install requirements
pip3 install -r requirements.txt
# run the script
python3 your_script_filename.py
# remove the venv
rm -rf venv
# deactivate the virtual environment
deactivate
这是一个非常基本的脚本,类似于Python脚本的手动调用。还有很大的改进空间。venv可以放在操作系统临时文件夹中,可以留在那里以便下次重用。这将消除重新创建venv和安装需求的需要。
我知道这不是你想要的,但我希望它能让你更进一步