Python中如何用pip安装外部主机文件

在python中安装非自带python模块,有三种方式: 

  • easy_install
  • pip
  • 下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的目录后执行python setup.py install命令

本文主要针对pip安装时可能会碰到的一种情况,及解决办法: 

假如我要安装pylint模块,该模块非python自带模块,用import肯定不能导入,需要额外安装

>>> import pylint
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pylint
现象

执行pip install <modulename>命令,报错如下:

D:\>pip install pylint --allow-external pylint
Downloading/unpacking pylint
Requirement already satisfied (use --upgrade to upgrade): six in c:\python27\lib\site-packages\six-1
.8.0-py2.7.egg (from pylint)
Downloading/unpacking astroid>=1.3.6 (from pylint)
  Real name of requirement astroid is astroid
  Could not find any downloads that satisfy the requirement astroid>=1.3.6 (from pylint)
  Some insecure and unverifiable files were ignored (use --allow-unverified astroid to allow).
Cleaning up...
No distributions at all found for astroid>=1.3.6 (from pylint)
Storing debug log for failure in C:\Users\aaa\pip\pip.log
分析

在Perl中安装新模块,一般可以用PPM图形化工具,也可以用CPAN来安装,比如说: cpan>install Test::Class, 非常方便,不会碰到这种情况,这种情况主要是因为pip版本问题: pip最新的版本(1.5以上的版本), 出于安全的考

虑,pip不允许安装非PyPI的URL,因为该安装文件实际上来自pylint.org,因而导致上面的错误!

NOTE:

1. 可以在官方changelog里面查看更改的信息

2. 可以用pip --version来查看pip的版本信息

C:\>pip --version
pip 1.5.6 from C:\Python27\lib\site-packages (python 2.7)

办法

针对上面的情况,既然这个问题是因为pip版本的原因,可以改用pip低一点的版本

方法一: 用pip 1.4版本,再执行pip install pylint命令来安装

方法二: 执行命令时,加上--allow-all-external, --allow-unverified及依赖包版本(astroid==1.3.6)

pip install pylint --allow-all-external pylint astroid==1.3.6 --allow-unverified pylint

NOTE:

1. --allow-all-external   # 允许所有外部地址的标签,只有打上该标签pip方可下载外部地址模块

2. --allow-unverified     #  pip没有办法校验外部模块的有效性,所以必须同时打上该标签

3. astroid==1.3.6          #  依赖包必须要添加上,并赋予其版本号,pip方能从列表下载     


方法三: 在当前目录下,新增requirements.txt,内容如下:

# requirements.txt
--allow-all-external pylint
--allow-unverified pylint
pylint
--allow-all-external astroid==1.3.6
再执行: pip install -r requirements.txt

结论

1. pip这个设计不够友好,使用也很不方便,远不如Perl中的PPM,期待Python中也有这么个工具。

2. 如果碰到这种错,导致不能安装模块的话: 直接下载压缩包安装好了。 >>>下载包地址<<<

3. 执行pip -h命令查看更新pip相关的帮助信息

Usage:   
  pip <command> [options]

Commands:
  install                     Install packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  zip                         DEPRECATED. Zip individual packages.
  unzip                       DEPRECATED. Unzip individual packages.
  bundle                      DEPRECATED. Create pybundles.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output.
  --log-file <path>           Path to a verbose non-appending log, that only logs failures. This log is active by default at pip.log.
  --log <path>                Path to a verbose appending log. This log is inactive by default.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               Path to alternate CA bundle.









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Docker 容器执行 Python 脚本,并从容器外部访问该脚本,可以使用 Docker 的卷(volume)功能。 具体步骤如下: 1. 在 Docker 容器创建一个卷,用于将容器内的脚本文件映射到容器外部的目录: ``` docker run -v /path/to/host/dir:/path/to/container/dir your_image_name ``` 其,/path/to/host/dir 是你想将容器内的文件映射到的主机目录,/path/to/container/dir 是容器内的目录。 2. 在 Python 脚本使用映射的路径来访问脚本文件。例如,在 Python 脚本,你可以使用以下代码访问容器内的脚本文件: ```python import os script_path = os.path.join('/path/to/container/dir', 'your_script.py') ``` 这将返回容器内的脚本文件的完整路径。 3. 在 Python 脚本执行容器内的脚本文件,例如: ```python import os script_path = os.path.join('/path/to/container/dir', 'your_script.py') os.system(f"python {script_path}") ``` 这将使用 os.system() 函数执行容器内的脚本文件。 注意,执行容器内的脚本文件时,你需要在 Dockerfile 将该脚本文件复制到容器内,并在 CMD 指定执行该脚本文件的命令。例如: ```Dockerfile FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY your_script.py /path/to/container/dir CMD [ "python", "/path/to/container/dir/your_script.py" ] ``` 这将复制 your_script.py 文件到容器内的 /path/to/container/dir 目录,并在容器启动时执行该脚本文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值