如何在本地使用pip install python包就像npm一样

时间:2013-05-04 15:05:00

标签: python path pip npm package-managers

假设我有一个名为Foo的项目,并希望在本地为此项目安装requests包。我期待的是一些类似的结构:

Foo/
|-main.py
|-requirements.txt
|-README.md
|-python_modules/
|-|-requests
...

我可以通过pip install -r requirments.txt -t ./python_modules/执行此操作,但是,由于__init__.py下没有python_modules/所以此功能无法正常导入,因此无法正常工作python_modules中的软件包。

另一方面,npm install做得非常好。

所以我的问题是,如何让pipnpm的工作方式相同?

PS:我知道还有其他使用virtualenvpythonbrew的约定,但我仍然想问这个问题。

3 个答案:

答案 0 :(得分:0)

Python世界中这个问题的常用解决方案是使用virtualenvs,或者更好的是使用像pipenv这样的包装器。如果您安装pipenv,您应该能够使用简单的pipenv install创建一个新的virtualenv:

[user@host Foo]$ pipenv install
Creating a virtualenv for this
project… ⠋Using base prefix '/usr' New python executable in
/home/user/.local/share/virtualenvs/Foo-oXnKEj-P/bin/python3 Also
creating executable in
/home/user/.local/share/virtualenvs/Foo-oXnKEj-P/bin/python Installing
setuptools, pip, wheel...done.

Virtualenv location: /home/user/.local/share/virtualenvs/Foo-oXnKEj-P
Creating a Pipfile for this project… Pipfile.lock not found, creating…
Locking [dev-packages] dependencies… Locking [packages] dependencies…
Updated Pipfile.lock (c23e27)!  Installing dependencies from
Pipfile.lock (c23e27)… �� ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 —
00:00:00 To activate this project's virtualenv, run the following: $
pipenv shell

然后使用pipenv shell

输入virtualenv
[user@host Foo]$ pipenv shell
Spawning environment shell
(/bin/bash). Use 'exit' to leave. source
/home/user/.local/share/virtualenvs/Foo-oXnKEj-P/bin/activate

[user@host Foo]$ source /home/user/.local/share/virtualenvs/Foo-oXnKEj-P/bin/activate

最后,您可以在requirements.txt中安装软件包:

(Foo-oXnKEj-P) [user@host Foo]$ pip install -r requirements.txt
Collecting Django==2.0.4 (from -r requirements.txt (line 1)) Using
cached
https://files.pythonhosted.org/packages/89/f9/94c20658f0cdecc2b6607811e2c0bb042408a51f589e5ad0cb0eac3236a1/Django-2.0.4-py3-none-any.whl
Collecting pytz (from Django==2.0.4->-r requirements.txt (line 1))
Using cached
https://files.pythonhosted.org/packages/dc/83/15f7833b70d3e067ca91467ca245bae0f6fe56ddc7451aa0dc5606b120f2/pytz-2018.4-py2.py3-none-any.whl
Installing collected packages: pytz, Django Successfully installed
Django-2.0.4 pytz-2018.4

(Foo-oXnKEj-P) [user@host Foo]$

答案 1 :(得分:0)

您还可以将poetry与本地poetry.toml配置一起使用

[virtualenvs]
in-project = true

答案 2 :(得分:0)

自从这个问题被首次提出以来,朝着这个方向已经有了一些进展。提出了 Python增强建议来建议这样的功能:PEP 582 "Python local packages directory"。虽然它仍然是草稿,但是...

有些工具已经实现了此 PEP 。我所知道的最高级的是PDM - Python Development Master。另一个是Pyflow

我相信两者(尤其是 pdm )都将提供类似于 npm 及其node_modules的UX。

其他一些提及: