Manage your python projects with pipenv(revised edition)|用pipenv管理你的python项目(修正版)

in #utopian-io7 years ago (edited)

pipenv.png

What Will I Learn?

  • You will learn what is pipenv
  • You will learn pipenv features
  • You will learn basic usage of pipenv

Requirements

  • have experience in python
  • have installed python and pip

Difficulty

  • Intermediate

Tutorial Contents

What is pipenv

Pipenv in Python is like npm in Nodejs or bundler in Ruby. It's a development workflow in python. It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile as you install/uninstall packages. It also generates the ever–important Pipfile.lock, which is used to produce deterministic builds.

Pipenv features
  • Enables truly deterministic builds, while easily specifying only what you want.
  • Generates and checks file hashes for locked dependencies.
  • Automatically install required Pythons, if pyenv is available.
  • Automatically finds your project home, recursively, by looking for a Pipfile.
  • Automatically generates a Pipfile, if one doesn’t exist.
  • Automatically creates a virtualenv in a standard location.
  • Automatically adds/removes packages to a Pipfile when they are un/installed.
  • Automatically loads .env files, if they exist.
Install Pipenv
pip install pipenv

If you already have a python project and want to manage it with pipenv

cd myproject
pipenv install

you can initialise your project with specified Python

pipenv --two install
pipenv --three install
pipenv --python3.6 install
pipenv --python path_to_excutable_python install

These commands will create two files Pipfile and Pipfile.lock. Pipfile includes dependencies without specified version while Pipfile.lock is detailed and strict.

Manage python dependencies

To install a Python package for your project use the install keyword. For example,

pipenv install requests

will install the current version of requests package. It will be removed with a similar keyword uninstall.

pipenv uninstall requests

The package name, together with its version and a list of its own dependencies, can be frozen by updating the Pipfile.lock.

pipenv lock

With Pipfile and Pipfile.lock, you can create a virtualenv and reinstall all dependencies in a new environment. With the following command, pipenv will load Pipfile and Pipfile.lock automatically in another environment.

pipenv install
Manage virtual environments

When you initialise a project, the virtualenv will be created automatically in ~/.local/share/virtualenvs.When I run

cd steemrobot
pipenv install

a virtualenv is created in ~/.local/share/virtualenvs/steemrobot-SeO244qt.
选区_001.png
You can locate your project and your virtualenvs with some keywords.
Locate the project:

$ pipenv --where
/store/MyProjects/steemrobot

Locate the virtualenv:

$ pipenv --venv
/home/mucyoung/.local/share/virtualenvs/steemrobot-SeO244qt

Locate the excutable python:

pipenv --py
/home/mucyoung/.local/share/virtualenvs/steemrobot-SeO244qt/bin/python
Development environment

There are usually some Python packages that are only required in your development environment and not in your production environment, such as unit testing packages. Pipenv will let you keep the two environments separate using the --dev flag.

pipenv install --dev requests

The above command will only install requests package in your development environment instead of production environment. When you initialise a project in a development mode, you should run

pipenv install --dev

while

pip install

in a production mode.

Running your project

You can run your project by entering the virtualenv with the command.

$ pipenv shell
(steemrobot-SeO244qt) mucyoung@mucyoung-P7xxTM:/store/MyProjects/steemrobot$

It's just like what you do with virtualenv.without explicitly activating it first, by using the run keyword.

pipenv run myproject.py

您能从本教程学到什么?

  • pipenv是什么
  • pipenv的特点
  • pipenv的基本使用

准备条件

  • 有python使用经验
  • 已经安装了python和pip

难度

  • 中等

教程内容

什么是pipenv

Pipenv之于Python就像npm之于Nodejs或者bundler之于Ruby。它是Python中的开发工作流。 它自动为你的工程创建一个virtualenv, 你在安装和删除包的时候可以自动生成更新相应的Pipfile。它也生成了一个同样重要的Pipfile.lock文件,Pipfile.lock文件是为了精确构建项目(所有依赖包版本必须精确)。

Pipenv的特点
  • 允许项目的精确build,指定了你需要的一切。
  • 对于锁定版本的依赖包生成并检查文件哈希。
  • 自动安装需要版本的python。
  • 通过寻找Pipfile自动递归寻找你的工程目录。
  • 如果项目中不存在Pipfile,自动生成Pipfile。
  • 在一个标准目录为一个项目自动生成一个virtualenv。
  • 在安装和删除包的时候可以自动生成更新相应的Pipfile。
  • 自动装在.env文件。
安装Pipenv
pip install pipenv

如果你已经有了一个python项目并想用pipenv管理它,你可以运行

cd myproject
pipenv install

你也可以指定具体的python版本

pipenv --two install
pipenv --three install
pipenv --python3.6 install
pipenv --python path_to_excutable_python install

这些操作会创建Pipfile和Pipfile.lock两个文件。Pipfile包含不指定具体版本的依赖包信息而Pipfile.lock更加具体和严格。

管理python依赖包

你可以用install关键字来安装一个python依赖包。比如,

pipenv install requests

命令会安装当前最新版本的requests包。同样的卸载相应包也可以用类似的uninstall关键字。

pipenv uninstall requests

依赖包名及版本可以通过如下命令被Pipfile.lock保存。

pipenv lock

通过Pipfile和Pipfile.lock文件,在一个新的环境你可以创建一个virtualenv环境并重新安装所有依赖包。通过如下命令, 在新的环境pipenv会自动读取Pipfile和Pipfile.lock文件并安装。

pipenv install
管理virtualenv

当你初始化一个项目时,~/.local/share/virtualenvs目录会自动创建一个virtualenv环境。当运行

cd steemrobot
pipenv install

时,~/.local/share/virtualenvs/steemrobot-SeO244qt就被创建了。
选区_001.png

你也可以用一些关键字定位你的项目和virtualenv。
定位项目:

$ pipenv --where
/store/MyProjects/steemrobot

定位virtualenv:

$ pipenv --venv
/home/mucyoung/.local/share/virtualenvs/steemrobot-SeO244qt

定位python执行环境:

pipenv --py
/home/mucyoung/.local/share/virtualenvs/steemrobot-SeO244qt/bin/python
开发环境

有一些包只会在开发环境中用到,而在生产环境中不会用到,比如单元测试相关包。 Pipenv用--dev来区分这开发环境和生产环境。

pipenv install --dev requests

上面的命令只会在开发环境中安装requests包,而不会在生产环境中安装。当你在开发模式下初始化下项目时,你应该运行

pipenv install --dev

pip install

则是在生产模式下初始化项目。

运行你的项目

你可以通过如下命令进入你创建的virtualenv环境之下。

$ pipenv shell
(steemrobot-SeO244qt) mucyoung@mucyoung-P7xxTM:/store/MyProjects/steemrobot$

剩下的操作就跟你在virtualenv中用的一样。如果你不希望事先activate你的virtualenv环境,你可以使用run关键字。

pipenv run myproject.py



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Well, since pipenv is coming from the same guy who created requests, says a lot. I like the idea. Month or so ago I tried it but I had some problems. Some libraries returned error when I tried to install them. I uninstalled pipenv, tried again and I had the same problem.

Maybe my computer is already messed up too much. Will try again soon, maybe it is fixed now whatever was a problem. Thanks for reminding me.

This is a pretty good post. I will bookmark it. I personally enjoy just using virtualenv.

Here are some handy links:
https://yoirtuts.com/index.php?title=Virtualenv_Correct_Usage

I usually just create a virtualenv with virtualenv itself:

 $ virtualenv yourenv -p python3.6

Now activate or deactivate virtualenv:

 $source yourenv/bin/activate

yourenv) $ deactivate

$ 

I use this guide for setting up virtualenv on osx:

https://www.codingforentrepreneurs.com/blog/install-django-on-mac-or-linux/

I use both virtualenv and pipenv. Pipenv is young and it uses virtualenv too. I think pipenv is mostly used to solve the problem of requests.txt instead of virtualenv.

Hey @mucyoung I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • This is your first accepted contribution here in Utopian. Welcome!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x