如何执行通过命令行导入第三方模块的python脚本



我有一个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和安装需求的需要。

我知道这不是你想要的,但我希望它能让你更进一步

最新更新