我正在尝试迁移到pipenv.我传统上使用setup.py与pip和没有pip install -e .安装该模块作为一个包,这样我可以做到这样的东西from myproject.xyz.abc import myClass从项目内的任何地方.
如何实现与类似的效果pipenv,摆脱的setup.py?
注意:我正在使用python 2.7.
使用pipenv install <package>与pip install <package>使用pipenv shell.
我知道pipenv install <package>会
pipenv lock自动运行命令。除了这些之外,这两者之间还有其他区别吗?
使用 pip 安装依赖项时出现以下错误:
pip9.exceptions.InstallationError 命令“python setup.py egg_info”在 /tmp/tmpoons7qgkbuild/opencv-python/ 中失败,错误代码为 1
下面是在pipenv install opencv-python最近的 linux (5.4.0 x64) 系统上运行命令的结果。
Locking [packages] dependencies…
self.repository.get_dependencies(ireq):
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi.py", line 174, in get_dependencies
legacy_results = self.get_legacy_dependencies(ireq)
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi.py", line 222, in get_legacy_dependencies
result = reqset._prepare_file(self.finder, ireq, ignore_requires_python=True)
File "/usr/lib/python3/dist-packages/pipenv/patched/notpip/req/req_set.py", line 644, in _prepare_file
abstract_dist.prep_for_dist()
File "/usr/lib/python3/dist-packages/pipenv/patched/notpip/req/req_set.py", line 134, in prep_for_dist
self.req_to_install.run_egg_info()
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/req/req_install.py", line 435, in run_egg_info
call_subprocess(
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/utils/__init__.py", line 705, in call_subprocess
raise InstallationError(
pip9.exceptions.InstallationError: Command "python setup.py egg_info" failed with error …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python 和 okta-aws 工具,为了在 aws 上获取正确的凭据,我需要运行 okta-aws init。但是收到错误信息,Could not read roles from Okta系统提示"Your Pipfile requires python_version 3.7, but you are using 3.8.3 (/usr/local/Cellar/o/1.1.4/l/.venv/bin/python)。
我已经尝试在 mac 上搜索所有的 Pipfile,似乎我~/Pipfile和/usr/local/Cellar/python@3.8/3.8.3_2/libexec/bin/Pipfile所有下的 Pipflie都具有相同的 3.8 版本的 python,而我下的 Pipfile /usr/local/Cellar/okta-aws-tools/1.1.4/libexec/Pipfile有required python_version = 3.7.
我已经为此苦苦挣扎了一段时间,真的不知道如何解决这个问题。
我有一个Python项目,包括一个Jupyter笔记本,一个bin目录中的几个脚本和一个目录中的模块src,依赖于Pipfile:
myproject
??? myproject.ipynb
??? Pipfile
??? Pipfile.lock
??? bin
? ??? bar.py
? ??? foo.py
??? src
??? baz.py
??? qux.py
Run Code Online (Sandbox Code Playgroud)
脚本foo.py和bar.py使用标准shebang
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
并可以运行pipenv shell:
mymachine:myproject myname$ pipenv shell
(myproject-U308romt) bash-3.2$ bin/foo.py
foo
Run Code Online (Sandbox Code Playgroud)
但是,我无法src从脚本中轻松访问模块.如果我加
import src.baz as baz
Run Code Online (Sandbox Code Playgroud)
到foo.py时,我得到:
ModuleNotFoundError: No module named 'src'
Run Code Online (Sandbox Code Playgroud)
我试过的一个解决方案是在下面添加一个.env文件myproject:
PYTHONPATH=${PYTHONPATH}:${PWD}
Run Code Online (Sandbox Code Playgroud)
此作品感谢pipenv的自动加载.env,但是检查的.env文件到项目的混帐分布将与传统使用的碰撞.env存储机密(如密码) -事实上,我的默认.gitignore …
我需要为我在pipenv中运行的python项目设置一些访问令牌环境变量.每次启动pipenv时我都想设置这些环境变量.
我该怎么做呢?
我pipenv用来处理Python包依赖项.
Python包使用两个包(命名pckg1和pckg2),这些包依赖于相同的包命名pckg3,但是来自两个不同的版本.显示依赖项树:
$ pipenv graph
pckg1==3.0.0
- pckg3 [required: >=4.1.0]
pckg2==1.0.2
- pckg3 [required: ==4.0.11]
Run Code Online (Sandbox Code Playgroud)
尝试安装依赖项:
$ pipenv install
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
Hint: try $ pipenv lock --pre if it is a pre-release dependency.
Could not find a …Run Code Online (Sandbox Code Playgroud) 当通过pip()安装时pip install pipenv,在zsh shell上找不到该命令pipenv。
如果通过brew:安装brew install pipenv,然后运行pipenv shell,出现错误
Loading .env environment variables...
Launching subshell in virtual environment...
Traceback (most recent call last):
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/bin/pipenv", line 8, in <module>
sys.exit(cli())
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 610, in invoke …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用pipenv并在这里的文档中
https://pipenv.readthedocs.io/en/latest/basics.html#importing-from-requirements-txt
它说(强调我的)
请注意,在导入需求文件时,它们通常会固定版本号,这可能是您不想要的
为什么是这样?
据我所知,Pipfile.lock文件将存储我安装的依赖项的特定版本和哈希,但我不希望能够看到Pipfile中安装的特定版本?(当我使用requirements.txt时,我的方式相同?)
很抱歉,这是一个非常复杂的pipenv情况。
在我公司,我们正在使用pipenv(同时带有Pipfile和Pipfile.lock)来控制用于不同工程师笔记本电脑的软件包。对于我们来说,这比对大多数团队而言更为重要,因为我们还使用Zappa来部署AWS Lambda代码,并且显然可以直接从部署者的便携式计算机中打包依赖项以进行部署。因此,如果人们的笔记本电脑在依赖性方面不完全一致,我们可以根据部署它的人员在云中获得不同的行为。
我们发现,即使在尝试使用Pipfile和完全控制依赖关系之后Pipfile.lock,我们最终还是在不同的笔记本电脑上得到了不同的Python包,如pip freeze部署代码中的错误所示和所示。
这是显示笔记本电脑与老板笔记本电脑之间差异的确切过程(我引用的Pipfile代码在多行中,但由于将SO格式设置遇到问题,因此将其压缩为一行):
Pipfile带有通配符(如)指定的软件包的[requires] python_version = "3.6" [packages] flask = "*"。另外,我们没有一个Pipfile.lock,我的老板(他是该项目的第一个编码器)一直在运行--skip-lockPipfile以使用显式版本替换通配符,还使Python版本更加具体,例如[requires] python_version = "3.6.4" [packages] Flask = "==1.0.2"。为此,我获得了老板pip freeze输出的副本,并将版本复制到Pipfile名称与此处列出的名称匹配的位置(我跳过了所有不匹配的内容,因为我认为这是上游依赖性,而我们没有尚未触及)。我犯了这个Pipfile.lock来控制上游依赖项。因此,我的老板第一次pip install没有--skip-lock参加比赛就创建了一个,并做出了承诺。Pipfile.lock,用删除了我的环境,pipenv --rm然后用重新创建了pipenv installpip freeze并比较了输出,但是我们仍然有许多差异。我想我可以有我的老板删除其pipenv环境并重新安装依据承诺Pipfile和Pipfile.lock,但由于它们是基于他pip freeze我会感到惊讶,有点如果改变任何东西。
所以我只是想知道:这种行为真的出乎意料吗?我一直以为,和的组合pipenv …
pipenv ×10
python ×9
pip ×4
python-3.x ×3
dependencies ×1
macos ×1
okta ×1
python-3.8 ×1
pythonpath ×1
setuptools ×1
virtualenv ×1
zsh ×1