如何在virtualenv中配置pip以将软件包安装到当前目录root?

Adi*_*M P 6 python pip amazon-web-services aws-lambda serverless-framework

我正在使用AWS Lambda的无服务器框架.当使用pip.conf时pip3.6,我想将"target-dir"设置为"当前目录".

将其设置为"." 像这样:

[global]
target = "."

不起作用,因为pip .在我的virtualenvroot中创建了一个名为" " 的新目录,并继续在那里安装东西.我试过没有引号.我也试过了./,但这会创建一个名为的目录.".

我使用virtualenv(通过venv使用python3.6),但我需要的软件包住在virtualenv中的根目录下,当我安装,因为AWS LAMBDA的局限性点子.

Dav*_*apa -1

[已编辑] pip.conf实际上是一个标准的 INI 文件,因此它只允许绝对路径(->绝对路径,但它以 lambda 函数的根为根);而且它不能在内部使用变量。

方法一

因此,您应该在选项中包含完整路径(从根目录“/”开始)target=

为此,您可以尝试使用(或类似的方法)检索 AWS Lambda 中的当前目录:

lambdash pwd
Run Code Online (Sandbox Code Playgroud)

即,尝试获取 shell 并调用pwd(= 打印工作目录)。使用此信息填写变量的正确路径target

方法2

但是,可以通过编程方式创建/更改 INI 文件。

因此,您可以将项目创建为可分发项目(如 pypi 或其他 DVCS 的项目)并设置一个setup.py

可以在此处找到准备项目进行分发的教程。关于setup.py的具体讨论可以在这里找到

可以添加的功能setup.py如下(自由调整):

# remember to add the imports:
from setuptools import setup
from setuptools.command.install import install
import ConfigParser
import io

class CustomInstallCommand(install):
    """Customized setuptools install command."""
    def run(self):
        config= ConfigParser.RawConfigParser()
        config.read(r'pip.conf')
        config.set('target', os.environ['LAMBDA_TASK_ROOT'])
        with open(r'pip.conf', 'wb') as configfile:
            config.write(configfile)
        install.run(self)


setup(
    ...
Run Code Online (Sandbox Code Playgroud)

(查看上述教程以了解 setuptools 在您的项目中的使用情况)