簡體   English   中英

如何通過命令行執行導入第三方模塊的 python 腳本

[英]How to execute python scripts that import third party modules via the command line

我有一個 py 文件,它使用傳遞給它的系統 arguments 執行 google 搜索,並將搜索的前五個結果作為單獨的瀏覽器選項卡打開(這是Automate the Boring Stuff一書中的一個練習)。

我想通過 Windows 運行命令執行此腳本,因此創建了一個 BAT 文件。

目前,當我執行 BAT 文件時,會返回“找不到模塊”錯誤。

我懷疑這個問題與py文件所需的模塊僅安裝在我的特定python項目的虛擬環境中有關(我有一個專門用於本書練習的項目)。 因此,我將必要的模塊直接安裝到我的主要 Python 安裝的環境中。 不幸的是,這沒有效果。

然后,我通過在執行 py 文件的行之前添加一行來激活我的虛擬環境來修改我的 BAT 文件。 這似乎阻止了我的 py 文件被 BAT 文件執行。

我對 Python 有點熟悉,但對 BAT 文件和命令行一般來說是新手。 我已經閱讀了一個基本的命令行教程,但找不到任何有用的東西。

我不確定如何解決這個問題,如果可能的話,我想避免用大量模塊污染我的主要 python 環境。 這是可能的,如果是的話,我錯過了什么?

.bat 文件

@py.exe C:\Users\Betty\PycharmProjects\Automate_the_Boring_Stuff\12\searchpypi.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)

編輯(UTC 2021 年 3 月 5 日星期五 16:41:27):

錯誤消息(從命令行復制):

Traceback (most recent call last):
  File "C:\Users\Betty\PycharmProjects\Automate_the_Boring_Stuff\12\searchpypi.py", line 8, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'
Press any key to continue . . .

編輯(UTC 2021 年 3 月 6 日星期六 07:39:43):

Pip 詳細信息:

C:\Users\Betty>pip -V
pip 21.0.1 from c:\python38\lib\site-packages\pip (python 3.8)

C:\Users\Betty>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:\Users\Betty>

自動化一切意味着:

  • 為此 Python 腳本創建虛擬環境
  • 采購它
  • 安裝依賴項
  • 運行腳本
  • 可選(必要時清理)

有一種方法可以在 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 和安裝要求的需要。

我知道這不是你想要的,但我希望它能讓你更進一步

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM