chu*_*uwy 249 python pip python-module pypi
我需要在我的脚本中直接从PyPi安装一个包.也许有一些模块或distutils(distribute,pip等)功能,它允许我只是执行像pypi.install('requests')和请求将被安装到我的virtualenv.
小智 362
您还可以使用以下内容:
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __name__ == '__main__':
install('argh')
Run Code Online (Sandbox Code Playgroud)
Aar*_*ndt 149
pip开发团队不支持Rickard的解决方案,并且在某些情况下会崩溃(例如多线程).此外,由于pip 10代码已被移动pip._internal以便明确表示不支持,因此该解决方案将因"pip> = 10.0.0"导入错误而失败.
Quantum的解决方案是解决问题的首选方法,但是他的实现并不能保证它会调用正确的点.
这个解决方案保证它调用运行代码的python解释器的pip.
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
Run Code Online (Sandbox Code Playgroud)
它与Quantum的解决方案相同,但它不是直接运行pip,而是运行运行代码的相同python可执行文件,并告诉它执行它已安装的pip模块并将其余参数传递给它.
rom*_*inf 70
如果要用于pip安装所需的软件包并在安装后导入它,则可以使用以下代码:
def install_and_import(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
import pip
pip.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
install_and_import('transliterate')
Run Code Online (Sandbox Code Playgroud)
如果您以用户身份安装了软件包,则可能会遇到无法导入软件包的问题.请参见如何刷新sys.path?了解更多信息.
Soh*_*Das 23
我在@Aaron 的回答中添加了一些异常处理。
import subprocess
import sys
try:
import pandas as pd
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
qua*_*tum 22
这应该工作:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
Run Code Online (Sandbox Code Playgroud)
Jan*_*amu 13
使用:
import os
os.system('pip install requests')
Run Code Online (Sandbox Code Playgroud)
我尝试了上述临时解决方案,而不是更改Docker 文件。
小智 8
您可以使用"install_requires"选项在自己包的setup.py中定义依赖模块.
如果你的包需要生成一些控制台脚本,那么你可以使用"console_scripts"入口点来生成一个包装器脚本,该脚本放在'bin'文件夹中(例如你的virtualenv环境).
如果您想要一个扩展的更有效的答案subprocess.check_call。您可以首先使用 检查是否已满足要求pkg_resources。
这适用于不同的需求说明符,这很好。例如>=,,,==:
import sys
import subprocess
import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict
def should_install_requirement(requirement):
should_install = False
try:
pkg_resources.require(requirement)
except (DistributionNotFound, VersionConflict):
should_install = True
return should_install
def install_packages(requirement_list):
try:
requirements = [
requirement
for requirement in requirement_list
if should_install_requirement(requirement)
]
if len(requirements) > 0:
subprocess.check_call([sys.executable, "-m", "pip", "install", *requirements])
else:
print("Requirements already satisfied.")
except Exception as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
用法示例:
requirement_list = ['requests', 'httpx==0.18.2']
install_packages(requirement_list)
Run Code Online (Sandbox Code Playgroud)
相关信息:Stack Overflow问题:58612272
小智 7
为了安装多个软件包,我使用了一个带有以下代码的 setup.py 文件:
import sys
import subprocess
import pkg_resources
required = {'numpy','pandas','<etc>'}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed
if missing:
# implement pip as a subprocess:
subprocess.check_call([sys.executable, '-m', 'pip', 'install',*missing])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211076 次 |
| 最近记录: |