关于pip:在代码中安装python模块

Installing python module within code

我需要在脚本中直接安装pypi中的包。可能有一些模块或distutils(distributepip等)功能,允许我执行pypi.install('requests')之类的操作,请求将被安装到我的virtualenv中。


您还可以使用如下内容:

1
2
3
4
5
6
7
8
9
10
11
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')


PIP开发团队不支持Rickard的解决方案,在某些情况下(如多线程)会崩溃。此外,由于PIP 10,代码已移动到pip._internal,以明确表示不支持该代码,因此该解决方案将失败,并在"PIP>10.0.0"上出现导入错误。

Quantum的解决方案是解决问题的首选方法,但是他的实现并不能保证它调用正确的PIP。

这个解决方案保证它调用运行代码的python解释器的pip。

1
2
3
4
5
import subprocess
import sys

def install(package):
    subprocess.call([sys.executable,"-m","pip","install", package])

它与Quantum的解决方案做的一样,但是它不直接运行pip,而是运行运行运行代码的同一个python可执行文件,并告诉它执行安装的pip模块,并将其余参数传递给它。


如果要使用pip安装所需的包并在安装后导入,可以使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
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')

如果以用户身份安装包,则可能会遇到无法仅导入包的问题。看到如何刷新sys.path了吗?更多信息。


这应该有效:

1
2
3
4
import subprocess

def install(name):
    subprocess.call(['pip', 'install', name])


您可以使用"Install_Requires"选项在自己包的setup.py中定义依赖模块。

如果您的包需要生成一些控制台脚本,那么您可以使用"控制台脚本"入口点来生成将要放置的包装脚本。在"bin"文件夹中(例如,您的virtualenv环境)。


我希望这个问题仍然有效。我是这样做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    import sys
    import os
    import site

    try:
       import pip
    except ImportError:
       print"installing pip"
       cmd ="sudo easy_install pip"
       os.system(cmd)
       reload(site)

    try:
       import requests
    except ImportError:
       print"no lib requests"
       import pip
       cmd ="sudo pip install requests"
       print"Requests package is missing
Please enter root password to install required package"

       os.system(cmd)
       reload(site)

第二个try块也可以写在第一个try块的其他部分,但是在我的problem语句中,我必须写两个单独的块。


这就是我如何为我的项目安装所有包的方法。

只需将所有名称添加到列表中,并在运行主代码之前执行一个名称。

把这个和"venv"结合起来是很好的!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"""call this module to setup your python packages via pip"""

from pip._internal import main as pip

pip_install_argument ="install"

# packages to install
packages_to_install = [
       "numpy",        # math magic 1
       "scipy",        # math magic 2
        ]

def install(packages):
   """installes given packages via pip

    Args:
        package names as list

    Returns:
        None

   """

    global pip_install_argument
    for package in packages:
        pip([pip_install_argument, package])

if __name__ == '__main__':
    install(packages_to_install)

我假设我们的机器上有一个PIP,并将尝试捕获缺少的特定依赖项。试试这个方法,让我知道你的想法。

1
2
3
4
5
6
7
8
import os
try:
    import something
    .....
    .....
except ImportError as e:
    pip = lambda : os.system('pip install' + str(e)[15:])
    pip()

也,如果使用lambda功能应用"自我感知"导入机制,请考虑使用pip模块本身。只需遵循此代码段:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try:
    import somthing
    ..........
    ..........
except ImportError as e:
    # importing pip module to handle pip functionalites
    import pip
    # create a lambda that import using pip by module_error_name=e[15:]
    installer = lambda : pip.main(['install', str(e)[15:])
    # create a lambda that import a module by linear_lambda_call
    importer = lambda x : __import__(str(x)).import_module()
    # install the module
    installer()
    # import the module
    importer()


对于我来说,这是可行的(python 2.x),假设所有需求都在requirements.txt中定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def pip_auto_install():
   """
    Automatically installs all requirements if pip is installed.
   """

    try:
        from pip._internal import main as pip_main
        pip_main(['install', '-r', 'requirements.txt'])
    except ImportError:
        print("Failed to import pip. Please ensure that pip is installed.")
        print("For further instructions see"
             "https://pip.pypa.io/en/stable/installing/")
        sys.exit(-1)
    except Exception as err:
        print("Failed to install pip requirements:" + err.message)
        sys.exit(-1)


pip_auto_install()

第一

1
2
> Download
> https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl

第二

1
2
3
4
extract .whl file and;  use winRar
copy extracted file and paste sitepackage [or python module container]

files are.. pip and pip-19.0.3.dist-info

第三

1
2
3
4
import pip
pip.main(['install','scpy'])

scpy or any package you want to install

由于可导入的PIP模块并不总是工作的,因此有更可靠的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def PackageInstall(error):
    '''
    Finds out which package is missing and downloads it automatically after five seconds.

    Use example:

    try:
        import numpy as np
        import matplotlib.pyplot as plot

    except ImportError as error:
        PackageInstall(error)

    '''

    import time, subprocess, os, sys
    lib = str(error)[15:].replace('\'', '')
    print('>>>',str(error))
    print('>>> Download will start after five seconds')
    time.sleep(5)
    subprocess.call("pip install" + lib)

    print('>>> Restarting')
    os.startfile(__file__)
    sys.exit()

这在Windows上工作。


我使用os.system来模拟OS终端导入模块,因为这样,您就可以在所有其他脚本中使用该模块。

例如,我正在创建一个在单独的脚本上运行的游戏引擎,其中大多数脚本使用pygame,如果用户没有pygame,启动文件将使用以下代码添加:

1
2
import os
os.system('pip install pygame')

不幸的是,我不知道如何将PIP放到用户的机器上,所以这取决于拥有PIP的用户。


您可以使用系统模块A进行安装。

1
2
import sys
!{sys.executable} -m pip install <package> --user


你可以一直下载

1
import os

然后右键所有终端命令,从那里下载。

喜欢

1
2
3
4
5
while True:

code = input("")

os.system("code")

不管它是什么,我都不确定,但是如果你甚至不知道如何在终端中完成它,你将如何在Python中完成它。