我不太确定如何构建一个非常简单的单文件源模块.是否有一个示例模块,其中一个Web可以构建为python .egg?
从setuptools页面看起来很简单,你只需要你的setup.py
文件,然后至少有一个其他.py文件,我可以构建一个.egg文件OK,甚至安装它easy_install
,但我似乎无法import
对文件从python中.(注意:使用2.6.4)
这是我的样本目录:
sconsconfig
setup.py
sconsconfig.py
Run Code Online (Sandbox Code Playgroud)
setup.py:
from setuptools import setup, find_packages
setup(name='sconsconfig',
version='0.1',
packages = find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
sconsconfig.py:
def blarg(x):
return x+1
Run Code Online (Sandbox Code Playgroud)
如果我运行setup.py bdist_egg
它然后创建一个鸡蛋文件,但如果我查看它,没有.py源文件....
我有一个Python项目,具有以下结构:
package1
class.py
class2.py
...
package2
otherClass.py
otherClass2.py
...
config
dev_settings.ini
prod_settings.ini
Run Code Online (Sandbox Code Playgroud)
我写了一个setup.py文件,将其转换为具有相同文件结构的egg.(当我使用zip程序检查它时,结构看起来完全相同.)有趣的是,当我从IDE运行Python代码时,它工作正常,可以访问配置文件; 但是当我尝试使用egg从不同的Python脚本运行它时,它似乎无法在egg中找到配置文件.如果我将配置文件放入相对于调用的目录中Python脚本(鸡蛋的外部),它的工作原理 - 但这种方式使得拥有一个自包含的鸡蛋的目的失败了,鸡蛋具有程序的所有功能,可以从任何地方调用.我可以使用任何类/模块并运行egg中的任何函数,只要它们不使用配置文件...但如果它们这样做,则鸡蛋找不到它们,因此函数不起作用.
任何帮助将非常感激!我们对这里的鸡蛋有点新意,并不知道从哪里开始.
我有一个已经构建/下载的Python蛋,我想将其转换为PEP 427中记录的轮式格式.
我怎样才能做到这一点?
我有一个本地创建的.egg
包依赖于boto==2.38.0.
我使用setuptools来创建构建分发.一切都在我自己的本地环境中工作,因为它boto
正确地从中获取PiP
.但是,databricks
当我将库附加到群集时,它不会自动获取依赖项.
我现在真的很挣扎了几天试图在databricks上加载时自动安装依赖项,我使用的setuptools;
'install_requires=['boto==2.38.0']'
是相关字段.
当我boto
直接PyPi
在databricks
服务器上安装(所以不依赖于该install_requires
字段正常工作)然后调用我自己的.egg
,它确实认识到这boto
是一个包,但它不识别它的任何模块(因为它没有导入我的拥有.egg的命名空间???).所以我不能让我.egg
上班.如果这个问题持续存在而没有任何解决方案,我认为这对databricks
用户来说是一个非常大的问题.当然应该有一个解决方案......
谢谢!
我可以通过以下方式成功为morfeusz2安装egg
\n\npython -m easy_install http://sgjp.pl/morfeusz/download/20181014/ubuntu-xenial/morfeusz2-0.4.0-py3.7-win-amd64.egg\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,我通过 . 定义的所有其他依赖项requirements.txt
。我希望所有这些都以一致的方式定义。morfeusz2 不存在于任何 PyPI 存储库中。如何以一致的方式定义项目的依赖关系?
例如,我尝试定义以下requirements.txt
文件:
django\npint\nhttp://sgjp.pl/morfeusz/download/20181014/ubuntu-xenial/morfeusz2-0.4.0-py3.7-win-amd64.egg\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,运行时pip install -r requirements.txt
失败并显示:
(mealplanner) D:\\Projects-intellij\\djangoproject\\mealplanner>pip install -r requirementx.txt\nCollecting http://sgjp.pl/morfeusz/download/20181014/ubuntu-xenial/morfeusz2-0.4.0-py3.7-win-amd64.egg (from -r requirementx.txt (line 3))\n Downloading http://sgjp.pl/morfeusz/download/20181014/ubuntu-xenial/morfeusz2-0.4.0-py3.7-win-amd64.egg (7.7MB)\n 100% |\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88| 7.7MB 11.4MB/s\n Complete output from command python setup.py egg_info:\n Traceback (most recent call last):\n File "<string>", line 1, in <module>\n File "c:\\users\\oem\\virtualenv\\mealplanner\\lib\\tokenize.py", line 447, in open\n buffer = _builtin_open(filename, \'rb\')\n FileNotFoundError: [Errno 2] No such …
Run Code Online (Sandbox Code Playgroud) 我在我的机器上安装 pandas 时遇到了这个错误:
运行 setup.py (路径:/tmp/pip-build-WzvvgM/pandas/setup.py) 包 pandas 的 Egg_info
清理...命令 python setup.py Egg_info 在 /tmp/pip-build-WzvvgM/pandas 中失败,错误代码为 1 在 /home/user508/.pip/pip.log 中存储失败的调试日志
我应该为 pandas 使用轮锉吗?Python“轮子”和“蛋”有什么区别?
从Python 打包用户指南中,我可以了解到两者都是用于安装 Python 包(或库)的存档格式,但“wheel”格式与“egg”格式有一个非常显着的区别。从用户的角度来看,轮子可以包含 C 和其他扩展,而无需安装开发人员工具(编译器等)。
为什么两者都用于安装Python包?
你在哪里可以强制pip安装为"平"而不是"蛋".
对我来说似乎是随机的.有时它会像鸡蛋一样安装,有时候会变平.
pip help install
仅显示--egg
强制鸡蛋安装的选项.但我找不到一个--flat
选择.
这些包来自一个自己的pypiserver,并上传如下:
python setup.py sdist upload -r internal
安装期间输出点数:
Best match: foo-client 2015.2
Downloading https://installserver:40443/pypi/packages/foo_client-2015.2.tar.gz
Processing foo_client-2015.2.tar.gz
Writing /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/setup.cfg
Running foo_client-2015.2/setup.py -q bdist_egg --dist-dir /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/egg-dist-tmp-GO1snX
Run Code Online (Sandbox Code Playgroud)
我不知道为什么bdist_egg
在这里使用.它是否强制创建鸡蛋安装?
在setup.py
不使用setuptools
不distutils
.
我们的pypiserver上的包看起来像这样:
tar -tzf packages/foo_client-2015.3.tar.gz
Run Code Online (Sandbox Code Playgroud)
内容:
foo_client-2015.2/
foo_client-2015.2/foo_client.egg-info/
foo_client-2015.2/foo_client.egg-info/SOURCES.txt
foo_client-2015.2/foo_client.egg-info/top_level.txt
foo_client-2015.2/foo_client.egg-info/dependency_links.txt
foo_client-2015.2/foo_client.egg-info/PKG-INFO
foo_client-2015.2/setup.cfg
foo_client-2015.2/PKG-INFO
foo_client-2015.2/foo_client/
foo_client-2015.2/foo_client/models.py
...
Run Code Online (Sandbox Code Playgroud)
背景
如果安装了压缩蛋,pip似乎有时会多次安装包.
更新
我发现在哪种情况下包被安装为egg:如果python setup.py develop
它是通过安装的(它是一个install_requires依赖项).
如果我使用pip install foo_client
它将安装平(我想要的方式).
UPDATE2
非常丑陋的部分:如果蛋安装,旧版本安装平坦不会被删除.
版本:点1.5.6
我正在使用dependency_links安装包.它似乎安装了软件包,但破坏了pip冻结功能(这可能意味着存在更深层次的安装问题.)我希望能够从自定义服务器下载软件包,而无需在运行之外进行任何设置setup.py
.
这是我的setup.py
档案:
from setuptools import setup
setup(
name='package'
,version='0.1.0'
,packages=['foo',
'bar'
]
,long_description=''
,url='https://github.com/myrepo'
,install_requires=['numpy>=1.9.2'
,'some_package'
]
,dependency_links=[
"http://custom_server/packages/some_package-0.1.0.tar.gz"
]
)
Run Code Online (Sandbox Code Playgroud)
安装似乎工作正常,但如果我尝试运行pip_freeze
我得到下面的错误.
pip freeze
Error [Errno 20] Not a directory: '/Users/abc/anaconda/lib/python2.7/site-packages/some_package.egg' while executing command git rev-parse
Exception:
Traceback (most recent call last):
File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/basecommand.py", line 209, in main
status = self.run(options, args)
File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/commands/freeze.py", line 70, in run
for line in freeze(**freeze_kwargs):
File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/operations/freeze.py", line 49, in freeze
dependency_links
File "/Users/myname/anaconda/lib/python2.7/site-packages/pip/__init__.py", line 235, in …
Run Code Online (Sandbox Code Playgroud) 我有一个小的python应用程序,我想将其制作成类UNIX系统的可下载/可安装的可执行文件.我的印象是,setuptools将是实现这一目标的最佳方式,但不知何故,这似乎不是一项常见的任务.
我的目录结构如下所示:
myappname/
|-- setup.py
|-- myappname/
| |-- __init__.py
| |-- myappname.py
| |-- src/
| |-- __init__.py
| |-- mainclassfile.py
| |-- morepython/
| |-- __init__.py
| |-- extrapython1.py
| |-- extrapython2.py
Run Code Online (Sandbox Code Playgroud)
包含的文件if __name__ == "__main__":
是myappname.py.这个文件在顶部有一行import src.mainclassfile
.
下载后,我希望用户能够执行以下操作:
$ python setup.py build
$ python setup.py install
Run Code Online (Sandbox Code Playgroud)
然后它将是一个已安装的可执行文件,它们可以从命令行的任何位置调用:
$ myappname arg1 arg2
Run Code Online (Sandbox Code Playgroud)
我的setup.py的重要部分如下:
from setuptools import setup, find_packages
setup(
name='code2flow',
scripts=['myappname/myappname.py'],
package_dir={'myappname': 'myappname'},
packages=find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
通过运行:
$ sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
然后在一个新的shell中: …
如何在 python 轮中只包含 *.pyc 文件?创建鸡蛋时,过去可以运行
python setup.py bdist_egg --exclude-source-files
鉴于鸡蛋已被轮子取代,我将如何重现类似的结果?
egg ×10
python ×8
pip ×4
python-wheel ×3
python-3.x ×2
setuptools ×2
apache-spark ×1
dependencies ×1
easy-install ×1
file ×1
freeze ×1
packaging ×1
pandas ×1
pyspark ×1
unix ×1